사용자 도구

사이트 도구


java:logback:config_groovy

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:logback:config_groovy [2013/07/10 16:39]
kwon37xi
java:logback:config_groovy [2016/01/04 14:00] (현재)
kwon37xi [File Appender Options]
줄 9: 줄 9:
     def maxHistoryCount = args.maxHistory ?: 10     def maxHistoryCount = args.maxHistory ?: 10
     def minLevel = args.level     def minLevel = args.level
 +    def logMarker = args.marker
          
     appender(appenderName, RollingFileAppender) {     appender(appenderName, RollingFileAppender) {
줄 25: 줄 26:
             filter(ch.qos.logback.classic.filter.ThresholdFilter) {             filter(ch.qos.logback.classic.filter.ThresholdFilter) {
                 level = minLevel                 level = minLevel
 +            }
 +        } else if (logMarker != null) {
 +            filter(ch.qos.logback.core.filter.EvaluatorFilter) {
 +                evaluator(ch.qos.logback.classic.boolex.OnMarkerEvaluator) {
 +                    marker = logMarker
 +                }
 +                onMismatch = ch.qos.logback.core.spi.FilterReply.DENY
 +                onMatch = ch.qos.logback.core.spi.FilterReply.NEUTRAL
             }             }
         }         }
줄 35: 줄 44:
         logPattern: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n')         logPattern: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n')
 </code> </code>
 +
 +===== FixedWindowRollingPolicy =====
 +<code groovy>
 +// 10MB 기준으로 롤링한다.
 +appender('errors', RollingFileAppender) {
 +    file = '/var/logs/error.log'
 +    append = true
 +
 +    encoder(PatternLayoutEncoder) {
 +        pattern = '%-5level %d{yyyy-MM-dd HH:mm:ss} [%thread] %logger{36} - %msg [%mdc]%n'
 +    }
 +
 +    filter(ch.qos.logback.classic.filter.ThresholdFilter) {
 +        level = ERROR
 +    }
 +
 +    rollingPolicy(ch.qos.logback.core.rolling.FixedWindowRollingPolicy) {
 +        fileNamePattern = '/var/logs/error.log.%i'
 +        minIndex = 1
 +        maxIndex = 5
 +    }
 +
 +    triggeringPolicy(ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy) {
 +        maxFileSize = '10MB'
 +    }
 +}
 +</code>
 +
 +===== Logger additivity =====
 +  * 특정 로거의 경우 특정 Appender로만 로그를 쌓고 root 로거로는 로그를 쌓고싶지 않을 때 ''additivity''를 ''false''로 지정한다.
 +  * 특정 로그만 처리할 Appender는 root 로거의 Appender로 추가하지 않는다.
 +
 +<code groovy>
 +// specialappender 생성
 +
 +logger('com.somthing.special', INFO, ['specialappender'], false) // 마지막 false가 additivity
 +
 +// root 로거에 specialappender를 추가하면 com.somthing.special 가 아닌 다른 로거들까지 해당 Appender가 처리하게 됨.
 +root(INFO, ['console']) 
 +</code>
 +
 +===== File Appender Options =====
 +  * ''append'' : ''true''이면 기존에 파일이 있으면 이어서 계속 쓴다. ''false''이면 기존 파일 내용을 삭제하고 쓴다.
 +  * ''prudent'' : 여러 JVM 프로세스가 하나의 파일을 보고 로그를 남길 수 있게 해준다.
 +    * 단, ''FixedWindowRollingPolicy''와는 사용할 수 없다.
 +    * ''RollingFileAppender''일 경우 날짜로 구분하면 ''file'' 값을 무시하고 처음부터 날짜를 붙여서 로그 파일을 생성한다. 여러 프로세스가 점유한 상태에서는 파일 이름 변경일 불가능하기 때문이다.
 +    * 파일 압축을 사용할 수 없다.
 +    * ''prudent''를 안 사용해도 여러 프로세스가 한 파일에 로그를 잘 남기기도 하는데, 그 경우 파일이 롤링되면 한 개의 프로세스만 로그가 올바로 남고 나머지는 로그를 못 남긴다.
 +    * 이런 저런 성능상의 문제나 제약이 많은 듯. 가능하면 사용하지 말기.
 +
 +===== JMXConfiguration =====
 +<code groovy>
 +jmxConfigurator()
 +
 +// 혹은
 +jmxConfigurator('MyName')
 +
 +// 혹은
 +jmxConfigurator('myApp:type=LoggerManager')
 +</code>
 +
 +JMX를 통해 로그 레벨을 바꾸려면 JConsole 등으로 접속하여 ''ch.qos.logback.class -> default -> ... > Operations -> setLoggerLevel''을 통해 첫번째 인자는 로거(ROOT 혹은 그외의 로거), 두번째 인자는 로그 레벨을 대문자로 적어주면 된다.
 +
 +
 +===== IntelliJ IDEA 대응 =====
 +  * IntelliJ IDEA 12버전 이하는 기본적으로 ''*.groovy'' 파일을 컴파일해 버린다.
 +  * **Settings -> Compiler -> Resource patterns**의 맨 끝에 '';logback*.groovy''를 추가하면 이를 소스가 아닌 리소스로 간주하여 컴파일시 제외시킨다.
 +
 +===== Status Listener =====
 +[[http://mrhaki.blogspot.kr/2015/08/show-logback-configuration-status-with.html|Show Logback Configuration Status with Groovy Configuration - Messages from mrhaki]]
 +<code groovy>
 +statusListener(OnConsoleStatusListener) // console로 logback 현재 상태를 출력함
 +</code>
 +
java/logback/config_groovy.1373441940.txt.gz · 마지막으로 수정됨: 2013/07/10 16:39 저자 kwon37xi