반응형
반응형
반응형


1. LOG4J 구조
① Logger(Category) : 로그의 주체 (로그 파일을 작성하는 클래스)
 - 로깅 메세지를 Appender에 전달합니다.
 - Log4j의 심장부에 위치하며, 개발자가 로그출력 여부를 런타임에 조정되도록 해준다.
 - Logger는 로그레벨을 가지고 있으며, 로그의 출력여부는 로그문의 레벨과 로거의 레벨을 가지고 결정된다.
 - 어플리케이션을 작성하기전 어떤 로거를 사용해야 할지 정해야 한다.
   ex) static Logger logger = Logger.getLogger(getClass());


② Appender : 로그를 출력하는 위치
 - 전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지 아니면 DB에 저장할 것인지 매개체 역활을 합니다.


③ Layout : Appender의 출력포맷
 - 어떤 형식으로 출력할 것이지 출력 layout을 결졍합니다.

 ※ Layout의 종류
 1) DateLayout
 2) HTMLLayout
 3) PatternLayout (일반적으로 PatternLayout을 사용하는 것이 디버깅에 가장 적합함)
 4) SimpleLayout
 5) XMLLayout

 

2. LOG4J 로깅 레벨
① FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
② ERROR : 일반 에러가 일어 났을 때 사용합니다.
③ WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
④ INFO : 일반 정보를 나타낼 때 사용합니다.
⑤ DEBUG : 일반 정보를 상세히 나타낼 때 사용합니다

 

3. 설정 포맷

① 로그파일명 포맷 (DatePattern)
 - 로그파일명 포맷입니다. 날짜, 시간 및 분단위로까지 로그 파일을 분리할 수 있습니다.

 ※ 형식 설명
  '.'yyyy-MM 매달 첫번째날에 로그파일을 변경합니다
  '.'yyyy-ww 매주의 시작시 로그파일을 변경합니다. 
  '.'yyyy-MM-dd 매일 자정에 로그파일을 변경합니다.
  '.'yyyy-MM-dd-a 자정과 정오에 로그파일을 변경합니다.
  '.'yyyy-MM-dd-HH 매 시간의 시작마다 로그파일을 변경합니다.
  '.'yyyy-MM-dd-HH-mm 매분마다 로그파일을 변경합니다.


② PatternLayout 포맷
 - 로그자체를 어떤 포맷으로 남길지 결정합니다.
 - layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout등이 있으며 PatternLayout이 일반적으로 가장 많이 쓰입니다.


%p  debug, info, warn, error, fatal 등의 priority 가 출력된다.
%m  로그내용이 출력됩니다
%d  로깅 이벤트가 발생한 시간을 기록합니다. 포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다
%t  로그이벤트가 발생된 쓰레드의 이름을 출력합니다.
%%  % 표시를 출력하기 위해 사용한다.
%n  플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.
%c  카테고리를 표시합니다. 예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
%C  클래스명을 포시합니다. 예) 클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
%F  로깅이 발생한 프로그램 파일명을 나타냅니다.
%l  로깅이 발생한 caller의 정보를 나타냅니다
%L  로깅이 발생한 caller의 라인수를 나타냅니다
%M  로깅이 발생한 method 이름을 나타냅니다.
%r  어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
%x  로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.
%X  로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.


test.jsp

[%c] [%C] [%d] [%F] [%l] [%L] [%m] [%M] [%n] [%p] [%r] [%t] [%x] [%X]

[test.jsp] [org.apache.jsp.test_jsp] [2005-03-10 12:37:23,561] [test_jsp.java] [org.apache.jsp.test_jsp._jspService(test_jsp.java:64)] [64] [fatal!!] [_jspService] [개행] [FATAL] [765567] [http-8080-Processor25] [] []

반응형
반응형

# Log4j Setting file(DEBUG ~ FATAL, OFF 일 경우 로그 사용 안함), 사용 로그 이름(appender 이름)
log4j.rootLogger=INFO, console


# log level and appender
log4j.logger.com.some=DEBUG, console
log4j.logger.com.some.Any=INFO, logfile
log4j.additivity.com.some=false  // 상위 로거의 속성을 상속받지 않겠다.(중복 출력하지 않는다)


# Console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %l - %m%n


# Daily file log
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.Append=true // restart 시 기존 파일에 추가, false : 새로 씀.
log4j.appender.logfile.Threshold=DEBUG // 이 appender 는 여기 명시된 priority 와 같거나 높은 메세지만 로깅한다
log4j.appender.logfile.ImmediateFlush=true // 로그메세지들이 전혀 버퍼되지 않는 것을 의미하며 대부분의 상황에 적당하다.
log4j.appender.logfile.File=./log_app.csv
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.MaxFileSize=300KB
log4j.appender.logfile.MaxBackupIndex=1 // 최대 파일이 넘어갔을 경우 백업
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L) - %m%n


# DB로그를 작성하기 위해서는 위와 같이 DB에 Table을 만들어야 한다
# jdbcappender.jar, ojdbc14.zip 파일 필요.

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)
)

log4j.appender.dblog=org.apache.log4j.jdbcplus.JDBCAppender
log4j.appender.dblog.url=jdbc:oracle:thin:@127.0.0.1:1521:MCSDB // DB url 정의
log4j.appender.dblog.dbclass=oracle.jdbc.driver.OracleDriver  // DB 드라이버 클래스 정의
log4j.appender.dblog.username=sds     // DB User 정의
log4j.appender.dblog.password=sdsdb     // DB Password 정의
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@') // INSERT SQL문 정의
log4j.appender.dblog.layout=org.apache.log4j.PatternLayout
log4j.appender.dblog.layout.ConversionPattern=%m
log4j.appender.dblog.buffer=1      // DB를 Update하기 전까지 SQL문의 Buffer 개수. 1이면 바로 Update 함
log4j.appender.dblog.commit=true     // commit 여부
log4j.appender.dblog.quoteReplace=true     // single quotes (')를 2 single quotes ('')로 변경 여부
log4j.appender.dblog.throwableMaxChars=3000    // throwable/exception stack trace의 최대 문자 개수 정의

반응형

'프로그래밍 > Java' 카테고리의 다른 글

IOStream 관련..  (0) 2009.07.21
[log4j] log4j 에 대한 설명.  (0) 2009.07.10
Enum 사용법.  (0) 2009.07.07
quartz 사용시 UserTransaction 에러 발생시 해결.  (0) 2009.06.18
abstract 와 interface 의 차이.  (0) 2009.06.05

+ Recent posts