Daily Rolling File Appender를 매우 많이 선언할 경우 함수 호출로 처리 할수 있도록 한다.
def addDailyRollingFileAppender(args) { def appenderName = args.name def filename = args.file def logPattern = args.pattern ?: '%-5level %d{yyyy-MM-dd HH:mm:ss} %logger{36} - %msg%n' def maxHistoryCount = args.maxHistory ?: 10 def minLevel = args.level def logMarker = args.marker appender(appenderName, RollingFileAppender) { file = "${filename}" append = true rollingPolicy(TimeBasedRollingPolicy) { fileNamePattern = "${filename}.%d{yyyy-MM-dd-HH-mm}.gz" // 구버전 파일 gz 압축 maxHistory = maxHistoryCount // maxHistory 이전 로그 파일 자동 삭제 } encoder(PatternLayoutEncoder) { pattern = logPattern } if (minLevel != null) { filter(ch.qos.logback.classic.filter.ThresholdFilter) { 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 } } } } // 호출 방식 addDailyRollingFileAppender(name: 'someappender', file: '/logs/someappender.log', logPattern: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n')
// 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' } }
additivity
를 false
로 지정한다.// specialappender 생성 logger('com.somthing.special', INFO, ['specialappender'], false) // 마지막 false가 additivity // root 로거에 specialappender를 추가하면 com.somthing.special 가 아닌 다른 로거들까지 해당 Appender가 처리하게 됨. root(INFO, ['console'])
append
: true
이면 기존에 파일이 있으면 이어서 계속 쓴다. false
이면 기존 파일 내용을 삭제하고 쓴다.prudent
: 여러 JVM 프로세스가 하나의 파일을 보고 로그를 남길 수 있게 해준다.FixedWindowRollingPolicy
와는 사용할 수 없다.RollingFileAppender
일 경우 날짜로 구분하면 file
값을 무시하고 처음부터 날짜를 붙여서 로그 파일을 생성한다. 여러 프로세스가 점유한 상태에서는 파일 이름 변경일 불가능하기 때문이다.prudent
를 안 사용해도 여러 프로세스가 한 파일에 로그를 잘 남기기도 하는데, 그 경우 파일이 롤링되면 한 개의 프로세스만 로그가 올바로 남고 나머지는 로그를 못 남긴다.jmxConfigurator() // 혹은 jmxConfigurator('MyName') // 혹은 jmxConfigurator('myApp:type=LoggerManager')
JMX를 통해 로그 레벨을 바꾸려면 JConsole 등으로 접속하여 ch.qos.logback.class → default → … > Operations → setLoggerLevel
을 통해 첫번째 인자는 로거(ROOT 혹은 그외의 로거), 두번째 인자는 로그 레벨을 대문자로 적어주면 된다.
*.groovy
파일을 컴파일해 버린다.;logback*.groovy
를 추가하면 이를 소스가 아닌 리소스로 간주하여 컴파일시 제외시킨다.Show Logback Configuration Status with Groovy Configuration - Messages from mrhaki
statusListener(OnConsoleStatusListener) // console로 logback 현재 상태를 출력함