log4j

자바로 프로젝트를 처음 해보는데

logging 유틸이 있다고는하나 귀차니즘으로
System.out 만 쓰다가 오늘 처음 log4j를 사용해봤다.

아주 먼옛날(그래봤자 7년전) C로 로깅할려고 비슷할것 조잡해게 만들었는데

log4j는 아주 멋지다.

콘솔은 물론이고, 파일도 날짜별 용량별로, 심지어 소켓으로 쏠수도 있다.

구글링하면 자료가 많이 나오니, 필자가 생각나는대로 정리해본다.
(개인 정리용이기 때문에 ㅋ)

MyFoo.java
[code java]
import org.apache.log4j.Logger;

class MyFoo{
  private Logger logger = Logger.getLogger(MyFoo.class);

  public MyFoo(){
      if(logger.isDebugEnabled(){ logger.debug(" 로깅 ! 테스트 ");
  }

 }
[/code]
아참, 이전에 기본설정(환경설정, 프로퍼티 설정)을 해야한다.

개인적으로 properties파일보다 xml파일을 먼저 보는게 도움이 된다고 생각한다.

- log4j.xml
[code html]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="stdout"
    class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%5p [%t] (%F:%L)- %m%n"/>
    </layout>
</appender>

</appender>
<root>
    <priority value ="DEBUG" />
    <appender-ref ref="stdout" />
    <!-- <appender-ref ref='fileout" />
</root>

</log4j:configuration>
[/code]
처음에 appender 가 뭔뜻인지 이해가 잘 안가는데 예제를 찾아가며 몇번 사용해 보면 알수 있다.
name을 stdout로 정하고  stdout은 ConsoleAppender라고 설정해준다.

이 appender의 출력 양식은 layout엘레멘트로 정해준다.

root 엘레멘트는 log4j에 기본적으로 있는 로거이며 priority 의 DEBUG는 'DEBUG' 레벨 이상은 로그로 남기라는 뜻이다. 그때 사용할 appender는 stdout 이라고 명명해 준 놈이다.

만약, appender의 class를 org.apache.log4j.DailyRollingFileAppender 로 해주면 날짜별 파일로 남길수 있다.
또는, 또다른 appender를 정의해주고 appender-ref에 추가해주면 콘솔로도 쓰고 파일로도 쓸수있다.(위 주석)
 
만약 원하는 패키지가 있다면 해당 패키지 별로 로깅 레벨을 정해줄수도 있다.

자료가 회사에 있기때문에 생각나는 대로 정리했고, 위 예제는 동작하지 않을수도 있다.

자바진영쪽에서는 표준(?) 이니 필자처럼 무식하게 System.out만 사용하지 않길 바란다.

댓글

이 블로그의 인기 게시물

C#에서 포인터 사용

WPF RichTextBox 와 Document의 바인딩

WPF 이미지위에 라인 그리기(WPF DrawLine on exist Image)