목차

Logback Groovy 설정

Daily Rolling File Appender 함수

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')

FixedWindowRollingPolicy

// 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'
    }
}

Logger additivity

// specialappender 생성
 
logger('com.somthing.special', INFO, ['specialappender'], false) // 마지막 false가 additivity
 
// root 로거에 specialappender를 추가하면 com.somthing.special 가 아닌 다른 로거들까지 해당 Appender가 처리하게 됨.
root(INFO, ['console']) 

File Appender Options

JMXConfiguration

jmxConfigurator()
 
// 혹은
jmxConfigurator('MyName')
 
// 혹은
jmxConfigurator('myApp:type=LoggerManager')

JMX를 통해 로그 레벨을 바꾸려면 JConsole 등으로 접속하여 ch.qos.logback.class → default → … > Operations → setLoggerLevel을 통해 첫번째 인자는 로거(ROOT 혹은 그외의 로거), 두번째 인자는 로그 레벨을 대문자로 적어주면 된다.

IntelliJ IDEA 대응

Status Listener

Show Logback Configuration Status with Groovy Configuration - Messages from mrhaki

statusListener(OnConsoleStatusListener) // console로 logback 현재 상태를 출력함