Spring/Spring Boot

Logback - 특정 이름별로 로그 분리 하기

엘룬 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 길어지는걸 되게 싫어 하는 스타일이라 마음에 들진 않는다. 그리고 더 좋은 방법이 분명 있을거 같은데 당분간은 이렇게 쓸거 같다. 

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

 

반응형