현재 쓰고 있는 로그파일을 2개로 분리해야 한다는 지령이 떨어졌다.
현재 우리 회사에서 쓰고 있는 logging framework는 logback.
logback은 log4j의 후속버전으로 logging 대표적인 라이브러리이다.
일단 logback의 구조를 살펴보면,
logback은 로그의 주체인 logger와 어디에 출력할지 기술하는 appender 그리고 어떻게 출력할지를 기술하는 encoder로 나뉜다.
설정은 간단히 xml파일로 가능하며 적은 메모리를 점유하고 빠른 이행이 특징이 있다.
pom.xml 설정
일단 logback을 쓰려면 pom.xml에 라이브러리를 추가해야 한다.
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
pom.xml 파일에 2개의 디펜던시를 추가하고 버전은 쓰고 싶은 버전을 기입해 주면 된다.
logback.xml 설정
<property name="LOG_HOME" value="d://logs/WWW" />
<appender name="STATICS_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/statics.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/backup/statics.log-%d{yyyy-MM-dd}</fileNamePattern>
<maxHistory>30</maxHistory> <!-- File Save Date -->
</rollingPolicy>
<encoder>
<pattern>%d %5p %40.40c:%4L - %m%n</pattern>
<ImmediateFlush>true</ImmediateFlush>
</encoder>
</appender>
그 다음에 해야할일은 logback.xml설정.
logback.xml에 원하는 이름의apperder를 추가한다.
file은 저장하고자 하는 파일 경로 및 이름을 쓰고, fileNamePattern과 maxHistory를 통해 백업하는 날짜 및 이름을 지정할 수 있다.
encoder에는 로그를 어떤 식으로 찍힐 건지 패턴을 적어준다.
%logger: 패키지 포함 클래스 정보
%logger{0}: 패키지를 제외한 클래스 이름만 출력
%logger{length}: Logger name을 축약할 수 있음. {length}는 최대 자리 수
%-5level: 로그 레벨, -5는 출력의 고정폭 값(5글자), 로깅레벨이i nfo일 경우 빈칸 하나 추가
${PID:-}: 프로세스 아이디
%d: 로그 기록시간 출력
%p: 로깅 레벨 출력
%F: 로깅이 발생한 프로그램 파일명 출력
%M: 로깅일 발생한 메소드의 명 출력
%line: 로깅이 발생한 호출지의 라인
%L: 로깅이 발생한 호출지의 라인
%thread: 현재 Thread 명
%t: 로깅이 발생한 Thread 명
%C: 로깅이 발생한 클래스 명 (%C{2}는 somePackage.SomeClass 가 출력됨)
%m: 로그 메시지
%msg: - 로그 메시지 (=%message)
%n: 줄바꿈(new line)
%%: %를 출력
%r : 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간(ms)
<logger name="STATICS" level="info">
<appender-ref ref="STATICS_LOG"/>
</logger>
그리고 appender를 부를 로거도 하나 만들어준다.
응용
private Logger log = LoggerFactory.getLogger(getClass());
private Logger newlog = LoggerFactory.getLogger("STATICS");
log.info("기존 로그");
newlog.info("로그 새로운 곳에 찍기");
이제 실전으로 들어가보자.
기존에 쓰고 있는 로그와는 다른 logger를 하나 만들어줬다.
그 이름은 logback 설정파일에 logger로 만든 이름과 동일해야 한다.
프로그램을 실행해 로그가 생기는지를 확인하자.
내가 설정한 폴더에 들어가 보면 statics.log라는 별도의 log파일이 생겼다.
log 파일을 열어 보면 내가 설정한 패턴과 함께 찍은 로그가 적혀있는 것을 확인할 수 있다.