Posts Log4j 로그파일 분리
Post
Cancel

Log4j 로그파일 분리

«Tistory 블로그에서 작성했던 글»

이번에 작업을 하면서 고객사측에서 로그를 직관적으로 볼 수 있게 해달라는 요청이 왔다.

워낙 document에 약해서 그쪽을 제대로 신경을 쓰질 못했는데 역시나…

그래서 이번에 부랴부랴 찾아본 로그관리 툴 Log4j.

사용하기도 편리하고 등급별로 로그를 남길 수가 있어서 많은 개발자들이 애용하고 있단다..

사실 log4j는 실무에서 자바 개발을 한다면 누구나 볼 수 있었을것이다.

다만 제대로 파악을 못하고 있었을 뿐…

사실 이번에 요놈을 사용해보니 특별히 어려운게 전혀 없었다..

설정파일만 잘 세팅하면 나머진 일도 아니다.

그래서 설정하는 법에 대해서만 기록을 남기고자 한다.

이번 프로젝트는 JAVA project로 만들어서 jar파일로 배포하는 것이 목적이었기 때문에 정말 자바로만 만들어졌다.

그래서 스프링의 XML이나 properties를 이용한 설정파일 불러오는 부분은 안해봤기 때문에 이 부분이 궁금하신 분은 다른곳에서 찾아보시길..

우선 나는 properties파일에 log4j 설정을 했다. XML로도 한다곤 하는데 이 역시 안해봤다. (…)

먼저 내가 셋팅한 log4j.properties 파일 내부를 살펴보자.

log4j.properties


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  # Logger Setting 
  log4j.logger.임의의.변수=DEBUG, 변수명1 
  log4j.logger.임의의.변수=WARN, 변수명2   

  # 변수1 Setting 
  log4j.appender.변수명1=org.apache.log4j.ConsoleAppender 
  log4j.appender.변수명1.layout=org.apache.log4j.PatternLayout 
  log4j.appender.변수명1.layout.ConversionPattern=\[%d\]%5p \[%t\] (%F:%FL) - %m%n   

  # 변수2 Setting 
  log4j.appender.변수명2=org.apache.log4j.DailyRollingFileAppender 
  log4j.appender.변수명2.File=D:/project/log 
  log4j.appender.변수명2.DatePattern='.'yyyy-MM-dd 
  log4j.appender.변수명2.Threshold=WARN 
  log4j.appender.변수명2.layout=org.apache.log4j.PatternLayout 
  log4j.appender.변수명2.layout.ConversionPattern=\[%d\]%5p \[%t\] (%F:%FL) - %m%n  

설정도 알고보면 별 것 없다. 개인적으로 손이 많이 안가는 라이브러리를 선호한다.

그럼 이역시도 하나씩 뜯어보자.

#logger Setting 부분에는 사용할 Logger를 정의해주는 것이다.

log4j.logger 가 Logger 클래스이고, 뒤에 붙은 임의의 변수는 무얼 넣든 상관 없다.
이부분은 자신의 상황에 맞게 변경해주면 될 것같다.

(보통은 프로젝트 패키지 형태로 입력 하는듯.. ex) log4j.logger.com.tistory.chaedae)

1. 로거 설정


1
log4j.logger.임의의.변수=DEBUG, 변수명1

앞의 DEBUG는 출력될 로그의 레벨을 정의하고 뒤의 변수명1은 해당 로거의 변수명을 선언한 것이다.

<로그레벨>

CODEVALUE
FATAL치명적인 에러
ERROR에러
WARN경고
INFO일반적인 정보
DEBUG상세정보

파일을 분리하지 않을것이라면 보통 루트로거를 설정해서 한번에 관리한다.

1
log4j.rootLogger=DEBUG, 변수명

이렇게 설정하고 아래 셋팅은 변수1이나 변수2중 필요한 것으로 셋팅 하면 된다.

2. 출력방식 설정


1
log4j.appender.변수명=org.apache.log4j.ConsoleAppender

해당 로거의 출력방식을 정의한다.

<출력방식>

CODEVALUE
ConsoleAppender콘솔상에 로그 메시지 출력
FileAppender로컬에 파일을 생성하여 파일에 로그 메시지 출력
RollingFileAppender위와 같은 기능에 로그파일 크기가 커지면 새로 생성해서 출력
DailyRollingFileAppender하루 단위로 로그파일을 생성해서 출력
net.SMTPAppender로그 메시지를 이메일로 전송

다른 몇가지가 더 있지만 위 방식들을 가장 많이 사용한다. 상황에 맞게 사용하면 된다.

3. 레이아웃 설정


1
log4j.appender.변수명.layout=org.apache.log4j.PatternLayout

출력되는 로그의 레이아웃을 정의한다.

패턴 레이아웃이 사용자가 직접 패턴을 정의해서 사용할 수 있기 때문에 보통 패턴레이아웃을 많이 사용한다.

4. 패턴 설정


1
log4j.appender.변수명.layout.ConversionPattern=[%d]%5p [%t] (%F:%L) - %m%n

출력되는 패턴을 정의한다.

<패턴>

CODEVALUE
%d날짜 출력
%p로그 레벨 출력
%t로그를 생성한 쓰레드명 출력
%c카테고리 이름 출력
%C로그를 생성한 클래스명 출력
%n개행 문자(엔터)
%F로그가 발생한 파일명 출력
%L로그가 발생한 행번호 출력
%I로그가 발생한 위치의 %F, %L, %M정보 출력
%M로그가 발생한 메소드 이름 출력
%m로그 메시지 출력
%r어플리케이션이 실행된 후 로그메시지 출력까지 걸린 시간

해당 패턴을 조합해서 원하는 형태로 출력하면 된다.

5. 파일 설정


1
2
log4j.appender.변수명2.File=D:/project/변수명2
log4j.appender.변수명2.DatePattern='.'yyyy-MM-dd

첫번째는 파일이 저장될 위치와 파일명을 정하는 것이고,

두번째는 파일명에 날짜를 지정하는 것이다.

ex) 변수명2.2015-11-13.log

6. 출력될 레벨 설정


1
log4j.appender.변수명2.Threshold=WARN

로그를 출력할 최소 레벨을 설정한다. 위처럼 WARN으로 설정한다면 WARN이상 레벨의 로그만 출력된다.

ex) WARN, ERROR, FATAL

개발도 중요하지만 혹시 모를 에러에 대응하기 위한 로그관리도 참 중요한 것 같다.

에러가 난 부분을 디버깅하거나 프로세스의 성공여부를 로그로 남겨두면 관리하기가 편리다.

System.out.println() 을 벗어나 log4j를 이용해서 로그도 이쁘고 편리하게 관리하면 좋을것 같다.

This post is licensed under CC BY 4.0 by the author.

XML 파싱

Logger 2개 사용하기

Comments powered by Disqus.