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 길어지는걸 되게 싫어 하는 스타일이라 마음에 들진 않는다. 그리고 더 좋은 방법이 분명 있을거 같은데 당분간은 이렇게 쓸거 같다.
당분간 쓸거 같기 때문에 블로그에 저장목적으로 남겨둘까 한다. 나중에 이거 어떻게 했드라 하고 잘잊어먹는 나를 위하여!
반응형