로그핸들링: logback 설정

일반적인 logback 출력 설정

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./logs/logback.log</file>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern> <!-- 해당 패턴 네이밍으로 현재 로그가 기록됨 -->
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>./was-logs/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <!-- 해당 패턴 네이밍으로 이전 파일이 기록됨 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize> <!-- 한 파일의 최대 용량 -->
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory> <!-- 한 파일의 최대 저장 기한 -->
        </rollingPolicy>
    </appender>

<!--    <root level="INFO">-->
<!--        <appender-ref ref="STDOUT" />-->
<!--    </root>-->

    <!--  file에 찍힐 로그  -->
    <logger name="com.dot3company">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>

    <logger name="org.springframework.web">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>

</configuration>
  • 루트의 레벨을 xml 내에 설정해줘야 각 logger 의 레벨을 다양하게 설정할 수 있음
  • <logger name=”com.dot3company” level=”warn” *additivity*="false" > 처럼 additivity (상속)을 false 로 하면 루트의 info 가 아닌 warn 로 레벨이 설정이 됨
  • xml 이 아닌 프로퍼티즈나 yml 에 루트 설정하면 안되더라

참조

Logback 으로 쉽고 편리하게 로그 관리를 해볼까요? ⚙️

[스프링부트 (5)] Spring Boot 로그 설정(1) – Logback

logstash-logback-encoder

GitHub – logfellow/logstash-logback-encoder: Logback JSON encoder and appenders

JSON 으로 로그파일 출력하기

Spring boot LogBack for ELK Stack

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}] [%thread{10}] [%X{traceId:-}] [%-5level] [%logger{0}:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./logs/logback.log</file>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/><!-- json 형태로 파일에 로그 남김 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>./was-logs/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <!-- 해당 패턴 네이밍으로 이전 파일이 기록됨 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize> <!-- 한 파일의 최대 용량 -->
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory> <!-- 한 파일의 최대 저장 기한 -->
        </rollingPolicy>
    </appender>

<!--    <root level="INFO">-->
<!--        <appender-ref ref="STDOUT" />-->
<!--    </root>-->

    <!--  file에 찍힐 로그  -->
    <logger name="com.dot3company">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>

    <logger name="org.springframework.web">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>

</configuration>