log4j 사용법

etc 2009. 8. 4. 21:12
http://www.apache.org 에 보면 logging 부분에 log4j 에 대해 찾을 수 있다. 여기서 apache 라는 재단은 오픈소스 소프트웨어 프로젝트에 대해 지원을 하는 곳이라고 보면된다. apache 의 하위 도메인으로 등록된 것들을 보면 이미 잘 알고 있는 프로젝트들을 많이 볼 수가 있다. 통합빌드툴인 Ant, 웹서버 Tomcat, MVC 프레임워크 Struts, DB프레임워크 iBATIS, Apache Velocity Engine 과 관련있는 Velocity 등이 그 예이다.

log4j 에 대한 사용법과 다운로드 등 더 자세한 내용을 보고 싶다면 관련 사이트(http://logging.apache.org/)를 참고하는 것이 가장 현명한 방법이다. 여기서 3이 아닌 4가 되었을까? 라는 생각도 하는 사람이 있을 수 있을 것 같은데, log4j (Log for java), log4cxx (Log for C++), log4net (Log for Microsoft .NET framework) 라고 보면 된다. (이미 알고 있었다면 웃음코드로 생각하고 넘어가자 ;;;)

log4j 는 1.2, 1.3, 2.0 등의 버전으로 구분되어 있는데 1.3 은 수요가 없어 중단된 버전이고 2.0 은 java 5 and later 에 맞게 개발 실험중에 있다. 필자는 apache-log4j-1.2.15.zip 버전을 이용할 것이다. (다운로드사이트)



   구조  

Log4j 는 크게 3가지로 구성되어 있다. 
1. Logger : 로깅 메세지를 Appender 에 전달한다.
2. Appender : 전달된 로깅 메세지를 파일에 기록할 것인지, 콘솔에 출력할 것인지 아니면 DB에 저장할 것인지 매개체 역할을 한다. 
3. Layout : Appender 가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것인지 출력 layout 을 결정한다. 

Appender 의 종류는 다음과 같다.
ConsoleAppender, FileAppender, SMTPAppender, SocketAppender, NTEventLogAppender, SyslogAppender, JMSAppender, AsyncAppender and NullAppender
Appender 의 앞에 붙은 이름만 보아도 Console, File, SMTP, Socket 등으로 출력한다는 것을 알 수가 있을 것이다. 

Layout 은 DateLayout, HTMLLayout, PatternLayout, SimpleLayout, XMLLayout 등 5개가 있다. 하지만 디버깅에는 PatternLayout 을 사용하는 것이 일반적이다.

로그 레벨은 다섯단계로 나누어 진다. 
1. DEBUG 
2. INFO
3. WARN
4. ERROR
5. FATAL

DEBUG < INFO < WARN < ERROR < FATAL

레벨에 따라서 출력여부를 결정할 수 있다. INFO 레벨의 경우 WARN, ERROR, FATAL 로 설정한 부분들이 출력된다. 즉 위의 자신의 레벨보다 큰 값(앞의 숫자가 큰것)들이 출력되는 것을 볼 수가 있다.  

사용법에서의 java 파일을 보면 코드 중간에 logger 의 값을 warn 으로 셋팅한 결과. 그 다음의 info 값은 출력되지 않는 것을 확인할 수가 있다. 

   사용법  


- 압축해제후 log4j-1.2.15.jar 파일을 해당 프로젝트의 build path 로 추가한다. 또는 자바(jdk) 설치 디렉토리의 lib/ext 에 log4j-1.2.15.jar을 복사 한다. 
- log4j의 설정에 관한 기본 파일은 log4j.properties 이다. 이 파일을 application classpath 의 어느 위치에 놓고 실행하면 된다. 
PropertyConfigurator.configure(...) 메소드를 이용하면 java properties file 로 부터 설정정보를 읽어올 수도 있다. 

log4j.properties sample
# Set root category priority to DEBUG and set its only appender to A1
log4j.rootCategory=DEBUG, A1

# A1 is set to be a ConsoleAppender (writes to system console).
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

위의 sample 파일은 BasicConfigurator.configure() 메소드를 사용했을때와 정확히 일치한다. 이말은 log4j.properties 파일 대신에 BasicConfigurator.configure() 메소드를 사용해도 똑같은 값을 얻을 수 있다는 말이다. 

Log4jTest.java


결과값
INFO ({main} Log4jTest.java[main]:10) [2009-08-04 18:20:36,877] - Starting up...
ERROR ({main} Log4jTest.java[main]:20) [2009-08-04 18:20:36,881] - Oops!
java.lang.ArithmeticException: / by zero
at logging.Log4jTest.main(Log4jTest.java:18)

그럼 위의 내용을 토대로 여러가지 방법으로 출력을 한번 해보자. 또한 패턴 이외에 좀 더 자세한 내용은 log4j API 를 살펴보자. 



참고 사이트 
- http://www.vipan.com/htdocs/log4jhelp.html
posted by 소연파파™