Log4J 사용 가이드

Language/JAVA 2013. 8. 29. 14:41

1. Log4J란 ?

자바 프로그램 작성 시 로그를 남기기 위해서 사용되는 Logging Framework

URL : http://logging.apache.org/log4j/docs/

 

2. Log4J 설치하기( URL : http://logging.apache.org/log4j/docs/download.html )

2.1. 해당 파일 다운 받기

2.1.1. 기본파일

- log4j-1.2.11.jar  : Log4J를 사용하기 위해서 필요한 Jar 파일

  (http://logging.apache.org/log4j/docs/download.html )

2.1.2. 확장파일 DataBase 로그파일을 남기기 위한 파일 )

jdbcappender.jar : JDBCAppender를 사용하기 위한 Jar 파일

ojdbc14.zip      : Oracle 드라이버 Jar 파일 ( 해당 DBMS에 대한 드라이버파일 )

 

2.2. log4j Configuration 파일 설정하기

2.2.1. Root Logger 설정

log4j.rootLogger=INFO, console, filelog ,dblog

 


- 첫번째는 Log Level을 설정하고 뒤에는 Appender를 설정한다.

- Appender는 상위에 표현되어 있는 것 같이 console(화면출력), filelog(파일), dblog(데이터베이스)로 설정할 수 있으며 Appender에 대한 상세설정은 추후 표기한다. - console, filelogdblog 등의 명칭은 아래에 설정된 명칭을 사용한다.

- Log Level DEBUG, INFO, WARN, ERROR, FATAL  구성되며위와 같이 INFO로 설되어 있으면 INFO이하인 DEBUG를 제외한 모든 로그가 기록된다.

log4j.appender.console=org.apache.log4j.ConsoleAppender

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

log4j.appender.console.layout.ConversionPattern=%-5p,%d{yyyy/MM/dd HH:mm:ss.SSS},%-5X{APP}, %-8X{TSC}, %m %n

 2.2.2. console Appender 설정

 

- 첫번째 라인 : console에 대한 클래스 정의

- 두번째 라인 : 로그를 나타내기 위한 Layout 클래스 정의

세번째 라인 : Layout에 대한 ConversionPattern을 정의

-          

 2.2.3. filelog Appender 설정

log4j.appender.filelog=org.apache.log4j.DailyRollingFileAppender

log4j.appender.filelog.Append=true

log4j.appender.filelog.DatePattern='.'yyyy-MM-dd-HH

log4j.appender.filelog.File=./log/app.csv

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

log4j.appender.filelog.layout.ConversionPattern=%-5p,%d{yyyy/MM/dd HH:mm:ss.SSS},%-5X{APP}, %-8X{TSC}, %m %n

 

- 첫번째 라인 : filelog에 대한 클래스 정의

- 두번째 라인 : 파일에 대한 Append 여부

- 세번째 라인 : 파일을 Backup하기 위한 DatePattern을 정의

- 네번째 라인 : 로그파일명을 정의

- 다섯째 라인 : 로그를 나타내기 위한 Layout 클래스 정의

- 여섯째 라인 :  Layout에 대한 ConversionPattern을 정의

 

2.2.4. dblog Appender 설정

CREATE TABLE APP_LOG

(

  SYSTEMNAME  VARCHAR2(100 BYTE),

  LOGDATE     TIMESTAMP            DEFAULT SYSDATE,

  LOGLEVEL    VARCHAR2(100 BYTE),

  MDC1        VARCHAR2(100 BYTE),

  MDC2        VARCHAR2(100 BYTE),

  MESSAGE     VARCHAR2(4000 BYTE),

  TROWABLE    VARCHAR2(4000 BYTE)

)


-          DB로그를 작성하기 위해서는 위와 같이 DB Table을 만들어야 한다.

 

 1 Line:log4j.appender.dblog=org.apache.log4j.jdbcplus.JDBCAppender

 2 Line:log4j.appender.dblog.url=jdbc:oracle:thin:@168.219.10.149:1521:MCSDB

 3 Line:log4j.appender.dblog.dbclass=oracle.jdbc.driver.OracleDriver

 4 Line:log4j.appender.dblog.username=sds

 5 Line:log4j.appender.dblog.password=sdsdb

 6 Line:log4j.appender.dblog.sql=INSERT INTO APP_LOG( SYSTEMNAME, LOGDATE, LOGLEVEL, MDC1,MDC2, MESSAGE, TROWABLE ) values ('MCSMGR',TIMESTAMP '@TIMESTAMP@','@PRIO@','@MDC:APP@','@MDC:TSC@','@MSG@','@THROWABLE@')

 7 Line:log4j.appender.dblog.layout=org.apache.log4j.PatternLayout

 8 Line:log4j.appender.dblog.layout.ConversionPattern=%m

 9 Line:log4j.appender.dblog.buffer=1

10 Line:log4j.appender.dblog.commit=true

11 Line:log4j.appender.dblog.quoteReplace=true

12 Line:log4j.appender.dblog.throwableMaxChars=3000

 

- Line : dblog에 대한 클래스 정의

- Line : DB url 정의

- Line : DB 드라이버 클래스 정의

- Line : DB User 정의

- Line : DB Password 정의

- Line : INSERT SQL문 정의

- Line : 로그를 나타내기 위한 Layout 클래스 정의

- Line : Layout에 대한 ConversionPattern을 정의

- Line : DB Update하기 전까지 SQL문의 Buffer 개수. 1이면 바로 Update 

- 10 Line : commit 여부

- 11 Line : single quotes (') 2 single quotes ('')로 변경 여부

- 12 Line : throwable/exception stack trace의 최대 문자 개수 정의

 

 

 2.3. Logging Class 작성하기

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.MDC;

import org.apache.log4j.PropertyConfigurator;

 

public class Trace

{

        private static Logger McsLogger = Logger.getRootLogger();

        

        public static void log( Level level, String app, String tsc, String message  )

        {

                 log(level,app,tsc,message, null );

        }       

        public static void log( Level level, String app, String tsc, String message,  Throwable t  )

        {

                 if( tsc == null )      tsc = "";

                 if( app == null )      app = "";

                 

                 MDC.put("APP",app);

                 MDC.put("TSC", tsc );

                 McsLogger.log( level, message, t );

                 MDC.remove("APP");

                 MDC.remove("TSC");

        }

        

        public static void main(String args[])

        {

                 String Path = System.getProperty( "user.dir" );

                 

                 PropertyConfigurator.configureAndWatch( Path +"/config/log4j.properties", 1000);

                 

                 System.out.println("URL:"+ Path +"/config/log4j.properties" );

                 

                 Trace.log( Level.INFO, "APP1","TQFRP01","Message01");

                 Trace.log( Level.WARN, "APP2","TQFRP05","Message02");

                 Trace.log( Level.FATAL, "APP3","TQFRP01","Message03", new Exception("Deaded!!"));

                 

                 

                 System.out.println("TEST COMPLETED !!");

        }

}

 

- 위와 같이 시스템별로 로그클랙스를 작성한다.


3. Log4J 적용 예제

3.1. 폴더구조

 

bin    : class 파일

config : log4j.properties

lib     : jdbcappender.jar, log4j-1.2.11.jar, ojdbc14.zip

log    : 로그파일app.cvs )

src    : 소스파일Trace.java )

3.2. 실행하기

run.bat  실행


참조-PatternLayout

아래 Conversion Pattern 실제로 Test 사용하시길 바랍니다.

Conversion

Character

Effect

c

클래스 명

 

 ) %c{2} : "a.b.c "b.c".

C

클래스 명

 

) %C{1} : org.apache.xyz.SomeClass → SomeClass

d

날짜 형식

 

 ) %d{dd MMM yyyy HH:mm:ss,SSS} , %d{HH:mm:ss,SSS}

F

파일 명

l

이벤트를 발생시킨 Caller의 위치정보

L

이벤트를 발생시킨 Caller의 라인번호

m

이벤트 메세지

M

이벤트를 발생시킨 Caller의 함수명

n

라입구분자

p

로그이벤트 우선순위

r

Application이 시작된 이후이벤트가 발생될 때까지 시간( milliseconds )

t

스레드의 이름을 출력

x

NDC(nested diagnostic context)의 사용하기

X

MDC (mapped diagnostic context) 사용하기

 

) %X{clientNumber} : clientNumber Key를 의미함

%

%%는 화면에 %를 출력함

 

[출처] Log4J 사용 가이드 |작성자 실바

출처 - http://blog.naver.com/gh2501/125766571

'Language > JAVA' 카테고리의 다른 글

JAXB: Marshalling and Unmarshalling CDATA block using EclipseLink MOXy  (0) 2013.09.03
.getClass() 와 .class의 차이점  (0) 2013.08.29
log4j  (0) 2013.08.29
jUnit 으로 Private Method 테스트 만들기  (0) 2013.08.28
Ant - tutorial  (0) 2013.08.26
: