본문 바로가기
호구지책/Java/Android

[JAVA] Log4j

by 하늘의흐름 2015. 8. 28.
반응형

자바에서 로그를 찍을 때, 그동안 System.out.println을 애용했었다.

하지만 이것의 문제는 출력한 뒤에 시간이 지나서 스크롤이 되어버리면

더이상 볼 수 없다는 것.

그래서 그걸 기록으로 남기는 로그가 필요한 것인데.

php에서는 쉽게 구현이 가능했으나, 자바에서는 어떻게 구현할 것인가 생각했다.

log4j라는 로그 라이브러리가 있다. 지금 최신버전은 2버전인데.

인터넷에는 1버전 자료가 많이 공개되어 있어 1버전 자료를 토대로 log4j를 활용했다.


log4j의 설정은 properties 파일을 활용하는데, src폴더 바로 밑에 넣어주거나,

그냥 같은 폴더 내에 있기만 하면 자동으로 log4j.properties  파일을 찾아내어 해당 설정을

읽고 설정에 맞게 로그를 뿌려준다.


설정파일의 내용은 대략 이렇다.


log4j.rootLogger = debug, stdout, dailyfile  


# Console log

#log4j.appender.stdout.Threshold = INFO

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n


# Daily file log

#log4j.appender.dailyfile.Threshold = INFO

log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender

log4j.appender.dailyfile.DatePattern ='.'yyyy-MM-dd-HH-mm

log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout

log4j.appender.dailyfile.File = ${catalina.home}\\logs\\logfile.log

log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n



로그에는 기본적인 레벨이 있다.


FATAL 심각

ERROR 에러

WRANING 경고수준

INFO 정보

DEBUG 디버깅


기본적으로 INFO레벨 부터 로그로 남겨야 된다고 본다. 

DEBUG 레벨의 로그는 프로그램을 수정하거나

이상한 점을 자세히 확인하기 위해 특별한 경우에만 사용해야 한다고 본다.


첫번째 라인은 루트로거다. 여기에서 설정한 값은 콘솔로거와 데일리로거에 영향을 준다.

물론 콘솔로그와 데일리로그에 별도의 설정값을 주면 해당 로거만 설정은 바뀌게 된다.

주황색에 debug라고 잡아두면, debug메시지까지 로그에 남기게 된다.

보통은 info로 사용하길 추천한다.


그리고 로그파일명에도 이슈가 있다.

처음에 생성시에는 로그 파일명에 날짜옵션이 적용되지 않는다.

로그 데이터패턴을 

log4j.appender.rolling.DatePattern='.'yyyy-MM-dd

이렇게 주었다면, 이는 하루 뒤에 날짜옵션이 적용된다는 걸 의미한다.

(분단위, 시간단위로 변경이 가능하다. 그러니 테스트시엔 분단위로 체크해보면 될 것이다.)


인터넷에 나와있는대로 하면 logfile.log.2015-08-28

이렇게 날짜가 확장자명이 되어버린다.

이 부분은 다음과 같이 변경해서 쓰면 된다.

log4j.appender.rolling.DatePattern='.'yyyy-MM-dd'.log'

이렇게 만들면 파일명이

logfile.log.2015-08-28.log

이렇게 만들어지게 된다.

앞에 붙는 접두어 logfile.log는

log4j.appender.dailyfile.File = ${catalina.home}\\logs\\logfile.log

log4j.appender.dailyfile.File 옵션에는 절대경로외에 상대경로도 역시 사용이

가능하다.

.으로 시작하면 현재경로를 의미한다. ..은 상위의 경로로 이동하는 것을 의미하고.

각자 환경에 맞게 log파일의 경로를 정해주면 된다.




참고링크

www.jakartaproject.com/board-read.do?boardId=jakarta&boardNo=111043840598200&command=READ&t=1440727607751


everlikemorning.tistory.com/entry/Log4J-간단-사용법


반응형

댓글