rolling log file appender / file로 logging / 로깅 / 로그 / 코드 사용법/ 코딩 / log rotate
ch.qos.logback 에서 RollingFileAppender 사용법
자세한 내용은 ref. 1을 참고하자.
아래 code에 있는 pattern 에 대해 간략한 설명:
// %-12 는 12개의 character 자리를 유지, %msg는 메시지, %n 은 new line
logEncoder.pattern = "%-12date{YYYY-MM-dd HH:mm:ss.SSS} %-5level - %msg%n"
TimeBasedRollingPolicy 에서 fileNamePattern:
- TimeBasedRollingPolicy 에서 fileNamePattern의 값을 보고 rollover period 를 정한다.
// `yyyy-MM-dd_HH` 이기에 1시간에 한번씩 rollover 된다.
// `yyyy-MM-dd` 라면 1일에 한번씩 rollover 된다.
// maxHistory 는 log 를 몇개까지 보관하느냐로 보면 된다.
val logFilePolicy = TimeBasedRollingPolicy<ILoggingEvent>();
logFilePolicy.fileNamePattern = "${logDir}/archived/logfile-%d{yyyy-MM-dd_HH}.log.zip";
logFilePolicy.maxHistory = 7;
// @ref: https://logback.qos.ch/manual/layouts.html
val loggerContext = LoggerFactory.getILoggerFactory() as LoggerContext
val root = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME) as ch.qos.logback.classic.Logger
root.level = if(System.getProperty("log.level") == "debug") Level.DEBUG else Level.INFO
val logEncoder = PatternLayoutEncoder()
logEncoder.context = loggerContext
logEncoder.pattern = "%-12date{YYYY-MM-dd HH:mm:ss.SSS} %-5level - %msg%n"
logEncoder.start()
val logDir = "logs"
val logFileAppender = RollingFileAppender<ILoggingEvent>();
logFileAppender.context = loggerContext;
logFileAppender.name = "logfile";
logFileAppender.encoder = logEncoder as Encoder<ILoggingEvent>;
logFileAppender.isAppend = true;
logFileAppender.file = "${logDir}/logfile.log"; // 현재 directory 기준이다. directory 가 없으면 자동으로 생성한다.
val logFilePolicy = TimeBasedRollingPolicy<ILoggingEvent>();
logFilePolicy.context = loggerContext;
logFilePolicy.setParent(logFileAppender);
logFilePolicy.fileNamePattern = "${logDir}/archived/logfile-%d{yyyy-MM-dd_HH}.log.zip";
logFilePolicy.maxHistory = 7;
logFilePolicy.start();
logFileAppender.setRollingPolicy(logFilePolicy);
logFileAppender.start();
root.addAppender(logFileAppender)
댓글 없음:
댓글 쓰기