«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은 해당 로거의 변수명을 선언한 것이다.
<로그레벨>로그레벨>
CODE | VALUE |
---|---|
FATAL | 치명적인 에러 |
ERROR | 에러 |
WARN | 경고 |
INFO | 일반적인 정보 |
DEBUG | 상세정보 |
파일을 분리하지 않을것이라면 보통 루트로거를 설정해서 한번에 관리한다.
1
log4j.rootLogger=DEBUG, 변수명
이렇게 설정하고 아래 셋팅은 변수1이나 변수2중 필요한 것으로 셋팅 하면 된다.
2. 출력방식 설정
1
log4j.appender.변수명=org.apache.log4j.ConsoleAppender
해당 로거의 출력방식을 정의한다.
<출력방식>출력방식>
CODE | VALUE |
---|---|
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
출력되는 패턴을 정의한다.
<패턴>패턴>
CODE | VALUE |
---|---|
%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를 이용해서 로그도 이쁘고 편리하게 관리하면 좋을것 같다.