스프링 부트 : application.properties로 로깅 레벨을 어떻게 설정할 수 있습니까?


301

이것은 매우 간단한 질문이지만 정보를 찾을 수 없습니다.
(아마도 Java 프레임 워크에 대한 지식이 심하게 부족합니다)

application.properties로 로깅 레벨을 설정하는 방법
로그 파일 위치 등?


1
레코드의 경우 다른 옵션은 로그 레벨을 환경 변수 (예 : heroku 대시 보드)로 설정하는 것입니다. 으로 Settings-> Config Vars집합 logging.level.com.yourpackage이 원하는 레벨 (INFO, ERROR, DEBUG)이다.
LukeSolar 2019

답변:


355

업데이트 : 봄 부팅 v1.2.0.RELEASE부터의 설정 application.properties또는 application.yml적용 않습니다. 참조 안내서 의 로그 수준 섹션 을 참조하십시오 .

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

이전 버전의 Spring Boot에서는 사용할 수 없습니다. 로깅 프레임 워크 (log4j, logback)에 대한 일반 구성 만 사용하면됩니다. 적절한 구성 파일 ( log4j.xml또는 logback.xml)을 src/main/resources디렉토리에 추가하고 원하는대로 구성하십시오.

--debug명령 행에서 애플리케이션을 시작할 때 지정하여 디버그 로깅을 사용할 수 있습니다 .

Spring Boot는 logback이 XML을 포함하여 baseback.xml 파일을 채색하는 등의 기본값을 구성 할 수 있는 좋은 출발점을 제공 합니다. (이것은 스프링 부트 의 기본 logback.xml 에서도 권장됩니다 .

<include resource="org/springframework/boot/logging/logback/base.xml"/>     

8
일반적으로 명령 행에서 수행 할 수있는 모든 작업은 외부 구성 파일에서 작동합니다. 그래서 debug = true가 생각합니다. 로깅은 매우 초기에 초기화되어야하기 때문에 그 플래그는 약간 특별하지만, 그것이 효과가 있다고 생각합니다.
Dave Syer

7
BTW 기본 로깅 시스템은 로그 백이며 기본적으로 스타터 폼에서 얻을 수 있습니다. 따라서 logback.xml은 세부적인 방식으로 로깅을 구성하는 가장 일반적인 도구입니다. --debug 플래그는 선택된 일부 Spring 로깅 채널을 켭니다.
Dave Syer

또 다른 팁, 스프링 부트에는 멋진 base.xml이 포함되어 있습니다. 좋은 출발점입니다. (확장 답변 참조).
M. Deinum

@ M.Deinum 다시 한 번 감사드립니다! 이제 내 코드의 로그 수준을 변경할 수 있습니다.
zeodtr

2
지금 할 수있는 것 같습니다. Spring v4.1.3.RELEASE (Spring Boot v1.2.0.RELEASE 사용)의 경우 Richard가 대답 한대로 설정 application.properties또는 application.yml적용됩니다 (모듈 론 :또는 =문제-콜론이 효과가있는 것 같습니다).
Eric Platon

108

application.properties를 사용하여이를 수행 할 수 있습니다.

logging.level.=ERROR-> 루트 로깅 레벨을 오류로 설정합니다
...-
logging.level.=DEBUG> 루트 로깅 레벨을 DEBUG로

logging.file=${java.io.tmpdir}/myapp.log설정합니다.-절대 로그 파일 경로를 TMPDIR / myapp.log로

설정합니다. 프로파일을 사용한 로깅과 관련된 정상적인 기본 application.properties 세트는 다음과 같습니다. application.properties :

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

application-dev.properties :

logging.level.=DEBUG
logging.file=

선호하는 IDE 내에서 개발할 때는 -Dspring.profiles.active=dev앱의 실행 / 디버그 구성에 VM으로 인수를 추가하기 만하면 됩니다.

출력을 로그 파일에 쓰지 않고 개발 중 프로덕션 및 디버그 로깅에만 오류가 발생합니다. 이것은 개발하는 동안 성능을 향상시킬 것입니다 (그리고 SSD 드라이브를 몇 시간 동안 절약 할 수 있습니다).


1
할당에 대한 '='부호가 작동하지 않았습니다. 구분자는 ':'을 사용하여 지정되었습니다. logging.level.:DEBUG
randominstanceOfLivingThing

2
이상하게도 예제 프로젝트에서이 설정을 사용하고 있습니다. ''(space), '='및 ':'기호는 구분 기호가 키에 사용되는 경우를 제외하고는 구분 기호로 동일하게 취급됩니다. 키에 공백이 포함되어 있지 않습니까?
Richard

1
":"은 작동하지만 "="는 무시됨을 확인할 수 있습니다. 편집 : 조만간 "="과 (와) 레벨 사이에 공백이있었습니다. 모든 것이 지금 작동합니다.
Mike R

1
이것은 내 테스트에서 작동하지 않습니다 spring-boot 1.4.0: logging.level.=DEBUG응용 프로그램이 시작되지 않고 오류가 발생합니다 :java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang

2
나에게 보인다 것은 logging.level.단지 편의 구문 지름길 logging.level.root로 선호 될 수있다, (1) 오타과 혼동을 덜 경향, (2) 잠재적으로 더 명시하고, 작업 (3) =더 전체적인 일관성을 제공 할당 기호, 구성 파일에.
Alain BECKER

66

루트 로깅 수준 을 설정하는 올바른 방법 은 속성을 사용하는 것 logging.level.root입니다. 이 질문이 처음 제공된 이후 업데이트 된 documentation을 참조하십시오 .

예:

logging.level.root=WARN

15

응용 프로그램의 패키지 이름이로 가정합니다 com.company.myproject. 그런 다음 아래 application.properties 파일에서 프로젝트 내부의 클래스에 대한 로깅 레벨을 설정할 수 있습니다.

logging.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUGlogging.level.org.hibernate = DEBUG스프링 프레임 워크 웹 및 최대 절전 모드 만의 클래스에 대한 로깅 수준을 설정합니다.

로깅 파일 위치를 설정하려면

logging.file = /home/ubuntu/myproject.log


14

Spring Boot를 사용하는 경우 application.properties 파일에 다음 특성을 직접 추가 하여 로깅 레벨을 설정하고 로깅 패턴을 사용자 정의하며 외부 파일에 로그를 저장할 수 있습니다.

이들은 다른 로깅 레벨과 최소 << 최대의 순서입니다.

OFF << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, its won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

이 링크를 통해 로그를보다 생생하게 사용자 정의하십시오.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html


왜 그런지 모르겠지만 logging.level.tech.hardik = trace. logging.level.roo = trace를 넣을 때 이것이 작동하지 않습니다
Arvind Kumar

10

debug=trueapplication.properties에 추가 하면 실제로 디버그 로깅을 사용할 수 있기 때문에 Dave Syer 팁을 좋아 하십시오.


8

예를 들어 log4j와 같은 다른 로깅 프레임 워크를 사용하려는 경우 가장 쉬운 방법은 스프링 부츠 자체 로깅을 비활성화하고 자체적으로 구현하는 것입니다. 그렇게하면 하나의 파일 인 log4j.xml (내 경우) 내의 모든 로그 레벨을 구성 할 수 있습니다.

이를 위해서는 pom.xml에 해당 라인을 추가하기 만하면됩니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

아마도 첫 번째 종속성이 있고 다른 두 개만 필요합니다. 이 예제는 log4j에만 적용됩니다.
그게 다야, 이제 log4j 구성 파일 내에서 부팅을 위해 로깅을 구성하도록 설정되었습니다!


이 제외는 저에게 효과적이었습니다. 내 REST Api가 내 log4j 종속성과 선택되지 않았습니다 log4j.properties.
ankitjaininfo

그들은 또한 spring-boot-starter-log4j2를 가지고 있습니다
Kalpesh Soni

4

로그 수준을 DEBUG로 설정하면 응용 프로그램을 시작하는 동안 모든 것이 표시됩니다.

logging.level.root=DEBUG

3

레코드 : Spring Boot v1.2.0.RELEASE 및 Spring v4.1.3.RELEASE와 같은 공식 문서 :

로깅에 필요한 유일한 변경 사항이 다양한 로거의 레벨을 설정하는 것이라면 "logging.level"접 두부를 사용하여 application.properties에서이를 수행 할 수 있습니다.

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

"logging.file"을 사용하여 콘솔 외에 로그 할 파일 위치를 설정할 수도 있습니다.

로깅 시스템의보다 세밀한 설정을 구성하려면 해당 LoggingSystem에서 지원하는 기본 구성 형식을 사용해야합니다. 기본적으로 Spring Boot는 시스템의 기본 위치 (예 : Logback의 경우 classpath : logback.xml)에서 기본 구성을 선택하지만 "logging.config"속성을 사용하여 구성 파일의 위치를 ​​설정할 수 있습니다.


2

더 자세하게 설정하려면 로그 구성 파일 이름 "logback.xml"또는 "logback-spring.xml"을 추가하십시오.

application.properties 파일에서 다음과 같이 입력하십시오.

logging.config: classpath:logback-spring.xml

loback-spring.xml에서 다음과 같이 입력하십시오.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

        <root level="INFO">
            <appender-ref ref="ROOT_APPENDER" />
        </root>

    </configuration>

2

기존 답변은 위대합니다. 로그를 그룹화하고 전체 그룹에서 로깅 수준을 설정할 수있는 새로운 스프링 부트 기능을 공유하고 싶습니다.

문서에서 제외하십시오.

  • 로깅 그룹 생성
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • 그룹의 로깅 레벨 설정
logging.level.tomcat=TRACE

더 많은 유연성을 제공하는 멋진 기능입니다.


2

현재 설정에서 application.yaml에 다음 과 같이 정의되어 있습니다 .

logging:
  level:
    ROOT: TRACE

spring-boot : 2.2.0.RELEASE를 사용하고 있습니다. TRACE 레벨과 같은 패키지를 정의 할 수 있습니다.


1
응용 프로그램 수준에서 설정됩니다. OP는 로그 설정에서 패키지 수준 필터가 필요한 최대 절전 모드 로그에 대해서만 추적을 원합니다.
Sudip Bhandari

2

스프링 부트 프로젝트에서 logging.level.root = WARN을 쓸 수 있지만 여기서 문제는 devtools 종속성을 추가해도 속성 파일에 값을 수정하면 자동 감지 할 수없는 속성 파일에 다시 시작해야한다는 것입니다. 해결책 i, 예를 들어 url.http : // localhost : 8080 / loggers / ROOT 또는 http : // localhost : 8080 / loggers / com의 우편 배달부 클라이언트에 표시된 것처럼 pom.xml에 액추에이터를 추가하고 로거 레벨을 전달할 수 있습니다 . .mycompany 및 본문에서 아래와 같이 json 형식을 전달할 수 있습니다.

{
  "configuredLevel": "WARN"
}

1

Eclipse IDE 및 프로젝트가 maven 인 경우 변경 사항을 반영하도록 프로젝트를 정리하고 빌드해야합니다.


1

Springboot 2를 사용하면 다음과 같이 환경 변수를 사용하여 루트 로깅 수준을 설정할 수 있습니다.

logging.level.root=DEBUG

또는 다음과 같이 패키지에 대한 특정 로깅을 설정할 수 있습니다.

logging.level.my.package.name=TRACE

환경 변수 구성의 LOGGING_LEVEL_ROOT=DEBUG경우 낙타 사례 구문을 사용하여 다음 을 사용하십시오.
Anthony Dahanne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.