본문 바로가기
개발(코딩) 경험 저장소/로그 관련

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

by 주니우스 2022. 1. 1.
반응형

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

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



 

 

 

반응형

댓글