Log4J 사용 가이드
Language/JAVA 2013. 8. 29. 14:411. 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, filelog, dblog 등의 명칭은 아래에 설정된 명칭을 사용한다.
- 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 |
- 1 Line : dblog에 대한 클래스 정의
- 2 Line : DB url 정의
- 3 Line : DB 드라이버 클래스 정의
- 4 Line : DB User 정의
- 5 Line : DB Password 정의
- 6 Line : INSERT SQL문 정의
- 7 Line : 로그를 나타내기 위한 Layout 클래스 정의
- 8 Line : Layout에 대한 ConversionPattern을 정의
- 9 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 사용 가이드 |작성자 실바
'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 |