개발(코딩) 경험 저장소/로그 관련

logback 에서 로그 파일 분리, 로그 파일 2개 이상 분리 사용

주니우스 2022. 1. 1. 16:40
반응형

가끔 개발을 하다보면 로그를 남기는 파일이 하나가 아니라 두개 이상이 필요할때도 생긴다.

대부분은 로그파일 하나에 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을 호출할 수 있도록 처리.



 

 

 

반응형