로그 레벨에 따라 로그를 출력하는 방식을 다르게 하고 싶은 경우 filter를 사용하여 이를 구현 할 수 있다. 로그 레벨에 따라 filter를 지정하므로 ch.qos.logback.classic.filter.LevelFilter
를 사용한다.
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>Log/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>Log/error-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n</pattern>
</encoder>
</appender>
위의 예제의 경우 loglevel이 error인 경우 파일에 로그를 남긴다. 또 다른 appender를 추가하여 레벨에 따라 콘솔에만 로그를 남기게 할 수도 있고 logstash로 전달하게도 할 수 있다. 아래는 각 레벨별 로그 설정에 대한 전문이다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n</pattern>
</encoder>
</appender>
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>Log/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>Log/error-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n</pattern>
</encoder>
</appender>
<appender name="LogstashAppender" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<destination>192.168.10.73:5001</destination>
<!-- encoder is required -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="debug">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ERROR"/>
<appender-ref ref="LogstashAppender"/>
</root>
</configuration>
STDOUT appender를 통해 레벨에 상관없이 모든 로그를 콘솔 출력하고, ERROR 레벨의 로그는 error.log 파일에 남긴다. 그 외 DEBUG 레벨의 로그들은 logstash로 전달하여 elk를 사용해서 로그를 관리한다.
'Programming > JAVA' 카테고리의 다른 글
logback 사용 시 jdbc 로그 찍는 방법 (0) | 2017.04.25 |
---|---|
tomcat 모니터링 (0) | 2017.04.10 |
getClass에 대해서 (0) | 2016.03.31 |
Map의 keySet()을 활용해보았다. (0) | 2016.03.31 |
댓글