logback 에서 로그 파일 분리, 로그 파일 2개 이상 분리 사용
가끔 개발을 하다보면 로그를 남기는 파일이 하나가 아니라 두개 이상이 필요할때도 생긴다.
대부분은 로그파일 하나에 LOG Level 에 따라 로그를 남기게 설정하는데,
어떤 로그는 별도의 로그파일에 남기기를 원할때가 생긴다.
예전에는 error 만 따로 남기는 파일을 생성 하고 싶었었고
이번에는 특정 이력만 별도의 로그파일에 남기고 싶었다.
뭐 다 기존 로그파일에 남길수 있긴 하지만 온갖 로그가 남는 파일에서 해당 내용만 찾아보는것도 번거롭고...
내가 원하는 내용만 별도로 로그를 남기면 편하니까~
java 소스파일에서 이미 사용하고 있는 logger.info(" 기존 로그") 는 있는상태이고
여기에 별도의 로그 남기는 부분을 추가한다.
기존 log는 info든 debug든 원래 수행하던 로그를 계속 남기는거고
내가 원하는 데이터만 newlog 에 남기는거다.
우선 아래와 같이 logback.xml 에 appender 를 추가한다.
(logback.xml 작성법은 별도로 찾아보시길)
(RollingFileAppender를 사용할 경우 자동적으로 오래된 로그를 지워주며 Rolling 백업을 처리한다.)
아래는 위 내용의 텍스트~
<appender name="newlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>&LOG_HOME;/current_queue.log</File>
<encoder>
<pattern>[[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p [%t][%C{1}.%M:%L]-%m%n</pattern>
<ImmediateFlush>true</ImmediateFlush>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>&LOG_HOME;/passed_joonlog-%d{yyyy-MM-dd}</fileNamePattern>
<maxHistory>30</maxHistory> <!-- File Save Date -->
</rollingPolicy>
</appender>
<logger name="joon" level="&LOG_LEVEL;">
<appender-ref ref="newlog"/>
</logger>
쉽게 이야기 하면 소스에서 "joon" 을 호출하고 logger는 newlog 를 찾아서 적용하는것이다.
위에 설정한 appender를 실제로 소스에서 적용하려면 당연히 logger 가 "joon" 을 호출하는 부분도 있어야 한다.
보통 아래 첫줄 처럼 기존 로그가 있는 상태에서 별도로 추가 생성하고 싶은 logger 를 추가 생성한다.
그리고 자신이 원하는 곳에 로그를 남긴다.
이렇게 하면 logger 는 원래 시스템로그를 남기던 파일에 log를 계속 추가해서 남기는거고
mylogger은 내가 별도로 생성한 current_queue.log 파일에 로그를 남긴다.
물론 소스 상단에는 아래내용이 import 되어있어야 한다.
참고로 아래는 출력 포맷 정보
%logger: 패키지 포함 클래스 정보
%logger{0}: 패키지를 제외한 클래스 이름만 출력
%logger{length}: Logger name을 축약할 수 있음. {length}는 최대 자리 수, ex)logger{35}
%-5level: 로그 레벨, -5는 출력의 고정폭 값(5글자), 로깅레벨이i nfo일 경우 빈칸 하나 추가
${PID:-}: 프로세스 아이디
%d: 로그 기록시간 출력
%p: 로깅 레벨 출력
%F: 로깅이 발생한 프로그램 파일명 출력
%M: 로깅일 발생한 메소드의 명 출력
%line: 로깅이 발생한 호출지의 라인
%L: 로깅이 발생한 호출지의 라인
%thread: 현재 Thread 명
%t: 로깅이 발생한 Thread 명
%c: 로깅이 발생한 카테고리
%C: 로깅이 발생한 클래스 명 (%C{2}는 somePackage.SomeClass 가 출력됨)
%m: 로그 메시지
%msg: 로그 메시지 (=%message)
%n: 줄바꿈(new line)
%%: %를 출력
%r : 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간(ms)
%d{yyyy-MM-dd-HH:mm:ss:sss}: [2021-07-12 12:42:78]과 같은 날짜가 로그에 출력됨.
%-4relative: %relative는 밀리초를 나타냄. -4를하면 4칸의 출력폼을 고정으로 가지고 출력. [2021-07-12 12:42:78:2332]와 같이 출력됨
%x : 로깅이 발생한 Thread와 관련된 NDC(nested diagnostic context)를 출력한다.
%X : 로깅이 발생한 Thread와 관련된 MDC(mapped diagnostic context)를 출력한다.
logback 라이브러리 참고내용
logback-core.jar logback 코어.
logback-classic.jar slf4j에서 logback을 호출할 수 있도록 처리.