ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] request, response 로그 남기기2 - logback(파일로 로그 남기기)
    개발기록 2022. 9. 14. 14:23
    반응형
    728x90

     

    개요

    앞서 했던 것에 이어서 로그를 파일로도 남기는 법에 대해 정리해보자.

    참고:

    https://tlatmsrud.tistory.com/64

    https://awse2050.tistory.com/72

    개발 순서 및 코드

    1. application.properties

    logback-spring.xml에서 사용할 property를 설정해준다.

    # log level
    log.config.level=info
    
    # log path
    log.config.path=/logs
    
    # log filename
    log.config.filename=log_file
    log.config.error.filename=error_file

     

    2. /resources/logback-spring.xml

    resources 하위에 logback-spring.xml 파일을 생성 후 아래와 같이 코드를 작성한다.

    필요에 따라서 수정하여 사용한다.

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 15초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
    <configuration scan="true" scanPeriod="15 seconds">
        <!-- Server Log Config -->
        <springProfile name="local">
            <property resource="application.properties"/>
            <!-- log level -->
            <property name ="LOG_LEVEL" value = "${log.config.level}"/>
            <!-- log file path -->
            <property name="LOG_PATH" value="${log.config.path}"/>
            <!-- log file name -->
            <property name="LOG_FILE_NAME" value="${log.config.filename}"/>
            <!-- err log file name -->
            <property name="ERR_LOG_FILE_NAME" value="${log.config.error.filename}"/>
            <!-- log pattern -->
            <property name ="LOG_PATTERN" value = "%-5level %d{yyyy-MM-dd HH:mm:ss} [${HOSTNAME}] [%thread] [%logger{0}:%line] - %msg%n"/>
    
            <!-- 패턴에 클래스 경로 추가할 경우 -->
            <!-- property name ="LOG_PATTERN" value = "%-5level %d{yyyy-MM-dd HH:mm:ss} [${HOSTNAME}] [%thread] [%C] [%logger{0}:%line] - %msg%n"/> -->
    
            <appender name="DEV_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <pattern>${LOG_PATTERN}</pattern>
                </encoder>
            </appender>
    
            <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <!-- 파일경로 설정 -->
                <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
                <!-- 출력패턴 설정-->
                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <pattern>${LOG_PATTERN}</pattern>
                </encoder>
                <!-- Rolling 정책 (파일 관리설정) -->
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
                    <fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
                    <!-- 파일 크기 지정할 때 사용 -->
                    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                        <!-- 파일당 최고 용량 kb, mb, gb -->
                        <maxFileSize>10MB</maxFileSize>
                    </timeBasedFileNamingAndTriggeringPolicy>
                    <!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
                    <maxHistory>30</maxHistory>
                    <!--<MinIndex>1</MinIndex> <MaxIndex>10</MaxIndex>-->
                </rollingPolicy>
            </appender>
    
            <appender name="Error" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <!-- 에러로그를 설정하고 로그의 레벨이 맞으면 onMatch, 아니라면 onMismatch  -->
                    <level>error</level>
                    <onMatch>ACCEPT</onMatch>
                    <onMismatch>DENY</onMismatch>
                </filter>
                <file>${LOG_PATH}/${ERR_LOG_FILE_NAME}.log</file>
                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <pattern>${LOG_PATTERN}</pattern>
                </encoder>
                <!-- Rolling 정책 -->
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${LOG_PATH}/${ERR_LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
                    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                        <maxFileSize>10MB</maxFileSize>
                    </timeBasedFileNamingAndTriggeringPolicy>
                    <maxHistory>30</maxHistory>
                </rollingPolicy>
            </appender>
            <root level="${LOG_LEVEL}">
                <appender-ref ref="DEV_CONSOLE"/>
                <appender-ref ref="FILE"/>
                <appender-ref ref="Error"/>
            </root>
        </springProfile>
    </configuration>

     

    3. 결과

     

     

     

    728x90
Designed by Tistory.