Spring Boot의 로깅 설정

다음은 Spring Boot에서 지원하는 로깅 설정입니다. Spring Boot 버전에 따라서 다를 수 있습니다.

Trace 모드 적용

다음은 --trace 옵션을 추가함으로써 Trace 레벨로 실행할 수 있습니다.

# java -jar target/spring-boot-logging-0.0.1-SNAPSHOT.jar --trace

파라미터로 Lgoging Level 변경

다음과 같이 -D 옵션을 이용하면 특정 패키지의 로깅 레벨을 변경할 수 있습니다.

-Dlogging.level.org.springframework=TRACE 
-Dlogging.level.io.datadynamics=TRACE

application.yml 파일로 Logging 설정

이 방식은 Logback용 로깅 설정 파일을 별도로 두지 않는 방식으로 간단하게 적용할 수 있습니다.

logging:
  level:
    root: ERROR
    org.springframework.web: ERROR
    io.datadynamics: DEBUG
    org.hibernate: ERROR

또한 기타 설정을 통해서 다음과 같이 파일명, 패턴 등을 지정할 수 있습니다.

logging:
  file: logs/application-debug.log
  pattern:
    console: "%d %-5level %logger : %msg%n"
    file: "%d %-5level [%thread] %logger : %msg%n"
  level:
    org.springframework.web: ERROR
    io.datadynamics: DEBUG
    org.hibernate: ERROR

터미널이 ANSI Color를 지원하면 다음의 설정을 이용하여 ANSI Color 적용 여부를 설정할 수 있습니다.

spring:
    output:
    ansi:
        enabled: DETECT

다음은 Boot의 Logging 설정시 Group을 지정한 예제입니다.

###################
## Logging
###################
 
logging:
  level:
    root: INFO
    tomcat: INFO
    freemarker: INFO
    jdbc.connection: WARN
    jdbc.audit: WARN
    jdbc.sqlonly: WARN
    jdbc.resultset: WARN
    jdbc.resultsettable: DEBUG
    org.hibernate: INFO
    org.springframework: INFO
    org.springframework.session: WARN
    io.datadynamics: DEBUG
    org.apache: INFO
    com.zaxxer: INFO
  group:
    tomcat: org.apache.catalina, org.apache.coyote, org.apache.tomcat

Logback 설정 파일로 Logging 설정

Spring Boot의 기본 로깅 Logback 설정 파일

Spring Boot는 다음의 파일에 대해서 기본 로깅 설정 파일로 사용하므로 파일이 있는 경우 로딩하여 적용합니다. 따라서 아래 파일명을 사용하는 경우 운영 환경에서 별도의 로깅 설정을 적용할 때 문제가 발생할 수 있으므로 사용시 다양한 측면을 고려해야 합니다.

  • logback-spring.xml
  • logback.xml
  • logback-spring.groovy
  • logback.groovy

Logback XML 파일 작성하기

파일명 주의

Logback 설정 파일의 파일명을 logback.xml 파일로 사용하면 Spring Boot Application JAR 파일을 실행할 때 외부에서 옵션을 통해서 Logback 설정 파일을 변경하고자 하는 경우 적용되지 않을 수 있습니다. 따라서 Logback 설정 파일은 logback-local.xml 등의 파일명으로 변경해서 사용해야 합니다.

application.yml 파일에 다음과 같이 Logback 설정 파일의 위치를 지정합니다. application.yml 파일을 실행시 별도로 지정하고 싶은 경우 --spring.config.location=application-prod.yml 등의 형식을 Spring Boot Application JAR 파일의 인자로 지정하게 되면 실행 환경에 맞춰서 다양한 로깅 설정을 할 수 있습니다.

application.yml 파일
logging:
  config: classpath:/logback-local.xml          → logback.xml로 파일명을 사용하지 않도록 합니다.

Logback 설정 파일을 logback-local.xml 으로 작성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <jmxConfigurator/>

    <property name="CONSOLE_LOG_PATTERN_DEBUG" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%c:%L]){cyan} %clr(:){faint} %m%n%wex"/>
    <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%c:%L]){cyan} %clr(:){faint} %m%n%wex"/>
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n%wex"/>
    <property name="MONITORING_LOG_PATTERN" value="[${PID:- }] [%d{yyyyMMdd-HHmmssSSS}] %m%n%wex"/>

    <property name="LAUNCHER_LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${java.io.tmpdir:-.}/}launcher.log}"/>
    <property name="MONITORING_LOG_FILE" value="./launcher-monitoring.log"/>

    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_DEBUG}</pattern>
        </encoder>
    </appender>

    <appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">
        <destinationLogger>org.springframework.boot</destinationLogger>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LAUNCHER_LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LAUNCHER_LOG_FILE}.%i</fileNamePattern>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <appender name="MONITORING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${MONITORING_LOG_PATTERN}</pattern>
        </encoder>
        <file>${MONITORING_LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${MONITORING_LOG_FILE}.%i</fileNamePattern>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>100MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <logger name="io.datadynamics" level="DEBUG"/>
    <logger name="laucher.monitoring" level="INFO">
        <appender-ref ref="MONITORING"/>
    </logger>

    <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
    <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
    <logger name="org.crsh.plugin" level="WARN"/>
    <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
    <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
    <logger name="org.springframework" level="INFO"/>
    <logger name="org.hibernate" level="INFO"/>
    <logger name="org.quartz" level="INFO"/>
    <logger name="com.mchange" level="INFO"/>

    <logger name="jdbc.sqlonly" level="DEBUG"/>
    <logger name="jdbc.sqltiming" level="DEBUG"/>
    <logger name="jdbc.resultset" level="DEBUG"/>
    <logger name="jdbc.audit" level="WARN"/>
    <logger name="jdbc.connection" level="WARN"/>
    <logger name="log4jdbc.debug" level="WARN"/>

    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

운영 환경에 적용하려면 CentOS 서비스 등록하기를 참고하십시오.

1 Comment

  1. Edward

    Fully Qualified Class Name이 표시되는 아주 간단한 Logback 설정

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable</Pattern>
            </layout>
        </appender>
    
        <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
        <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
        <logger name="org.crsh.plugin" level="WARN"/>
        <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
        <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
        <logger name="org.springframework" level="INFO"/>
        <logger name="org.hibernate" level="INFO"/>
        <logger name="org.quartz" level="INFO"/>
        <logger name="com.mchange" level="INFO"/>
        <logger name="io.datadynamics" level="DEBUG"/>
    
        <logger name="jdbc.sqlonly" level="DEBUG"/>
        <logger name="jdbc.sqltiming" level="DEBUG"/>
        <logger name="jdbc.resultset" level="DEBUG"/>
        <logger name="jdbc.audit" level="WARN"/>
        <logger name="jdbc.connection" level="WARN"/>
        <logger name="log4jdbc.debug" level="WARN"/>
    
        <root level="info">
            <appender-ref ref="Console" />
        </root>
    
    </configuration>