ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Logback - 특정 이름별로 로그 분리 하기
    Spring/Spring Boot 2019. 6. 26. 10:37
    반응형

    Logback 이 로그 파일을 쌓는 방식을 기본적으로는 패키지 명이나 로그 레벨 단위로 나누거나 하는 경우가 많다. 

    이번에 특이하다고 하긴 그렇지만 특정 이름별로 로그를 분리 할 이유가 생겼다. 여러가지 구글링을 해봤지만 앞서 말한 방식들로 대두분 이야기하고있었다. 나에게는 당장 그렇게 필요하지 않는 부분이여서 구글링능력 부족(?)을 한탄하며 그냥 기억나는대로 세팅을 했다. 

     

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
    
    
        <appender name="Connection" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- rollover daily -->
                <fileNamePattern>log/connection-%d{yyyy-MM-dd}.%i.txt.zip</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS}-%green(%-5level)-%logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="Config" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- rollover daily -->
                <fileNamePattern>log/config-%d{yyyy-MM-dd}.%i.txt.zip</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS}-%green(%-5level)-%logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
    
        <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- rollover daily -->
                <fileNamePattern>log/apilog-%d{yyyy-MM-dd}.%i.txt.zip</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS}-%green(%-5level)-%logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%d{HH:mm:ss.SSS}-%green(%-5level)-%logger{36} - %msg%n</Pattern>
            </layout>
        </appender>
    
    
        <!-- Loggers -->
        <logger name="org.springframework.core">
            <level value="info"/>
    
        </logger>
        <logger name="org.springframework.beans">
            <level value="info"/>
    
        </logger>
        <logger name="org.springframework.context">
            <level value="info"/>
    
        </logger>
        <logger name="org.springframework.web">
            <level value="info"/>
    
        </logger>
        <logger name="com.example.web">
            <level value="debug"/>
    
        </logger>
    
    
        <!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. -->
        <logger name="jdbc.sqlonly" additivity="false">
            <appender-ref ref="ROLLING"/>
            <appender-ref ref="STDOUT"/>
            <level value="OFF"/>
        </logger>
        <!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
        <logger name="jdbc.sqltiming" additivity="false">
            <appender-ref ref="ROLLING"/>
            <appender-ref ref="STDOUT"/>
            <level value="DEBUG"/>
        </logger>
        <logger name="jdbc.resultset" additivity="false">
            <appender-ref ref="ROLLING"/>
            <appender-ref ref="STDOUT"/>
            <level value="OFF"/>
    
        </logger>
        <logger name="jdbc.resultsettable" additivity="false">
            <appender-ref ref="ROLLING"/>
            <appender-ref ref="STDOUT"/>
            <level value="DEBUG"/>
    
        </logger>
        <logger name="jdbc.connection" additivity="false">
            <appender-ref ref="ROLLING"/>
            <level value="OFF"/>
        </logger>
        <logger name="jdbc.audit" additivity="false">
            <appender-ref ref="ROLLING"/>
            <appender-ref ref="STDOUT"/>
            <level value="OFF"/>
        </logger>
    
    
        <logger name="Connection" level="INFO" additivity="false">
            <appender-ref ref="Connection" />
        </logger>
        <logger name="Config" level="INFO" additivity="false">
            <appender-ref ref="Config" />
        </logger>
       
    
        <root level="info">
            <appender-ref ref="ROLLING"/>
            <appender-ref ref="STDOUT"/>
        </root>
    </configuration>
    

     

     

    별건 아니지만 appender 를 목적에 맞게 추가해주고 사용할 이름에 대해서 명시해준뒤 logger 만 설정해주면 소스상에서 getLogger 시 설정한 이름으로 로그 객체를 가져와 로그를 기록하면된다. 각각의 appender 를 만들어 주었기 때문에 로그별로 특별히 다르게 하기도 쉽다. 단지 xml 길어지는걸 되게 싫어 하는 스타일이라 마음에 들진 않는다. 그리고 더 좋은 방법이 분명 있을거 같은데 당분간은 이렇게 쓸거 같다. 

     당분간 쓸거 같기 때문에 블로그에 저장목적으로 남겨둘까 한다. 나중에 이거 어떻게 했드라 하고 잘잊어먹는 나를 위하여! 

     

    반응형

    'Spring > Spring Boot' 카테고리의 다른 글

    Spring boot Database 다중 연결 ( feat.Jooq )  (1) 2019.10.28
    Spring boot vs Spring Framework  (1) 2019.08.07
    Spring Cloud  (0) 2019.03.25
    [설정] Spring boot 2 Logback 설정  (0) 2019.01.30
    [설정] Spring boot 2 Yml 설정하기  (0) 2019.01.28
Designed by Tistory.