Log4j Summary

프로그래밍/common 2010. 4. 20. 12:31

Log4j 는 세개의 컴포넌트를 가진다.

logger, appender, layout

 

Logger

 

Logger의 상속 구조

dot(.) 으로 구분된 이름을 갖는 Logger 는 상속 관계를 갖게되는데 예를 들어 “com.foo” 이름을 갖는 Logger “com.foo.Bar” 이름을 갖는 로거의 부모 Logger 이다. “java”, “java.util”, “java.util.Vector” 의 이름을 갖는 로거가 있을 때 “java” Logger “java.util” 로거의 부모이며 “java.util” Logger “java.util.Vector” 로거의 부모이다.

- Logger 의 이름은 대소문자를 구별한다.

- 모든 Logger root 로거를 부모로 갖는다.

 

package org.apache.log4j;

 

  public class Logger {

 

    // Creation & retrieval methods:

    public static Logger getRootLogger();

    public static Logger getLogger(String name);

 

    // printing methods:

    public void trace(Object message);

    public void debug(Object message);

    public void info(Object message);

    public void warn(Object message);

    public void error(Object message);

    public void fatal(Object message);

 

    // generic printing method:

    public void log(Level l, Object message);

}

 

Logger 위와같이 trace, debug, info, warn, error, fatal 레벨을 갖게된다.

 

상속 관계에 따른 Logger 레벨

Logger 이름

레벨

적용 레벨

root

INFO

INFO

com

none

INFO

com.foo

none

INFO

com com.foo Logger 는 레벨이 설정되어 있지 않기 때문에 부모의 레벨 INFO 를 상속받는다.

com.foo 는 바로위의 Logger com 의 레벨이 설정되어 있지 않기 때문에 최상의 Logger root Logger의 레벨을 상속받는다.

 

Logger 이름

레벨

적용 레벨

root

INFO

INFO

com

DEBUG

DEBUG

com.foo

none

DEBUG

com.foo Logger 는 레벨이 설정되지 않았기 때문에 바로 위의 부모 Logger com Logger 의 레벨을 상속 받는다.

 

Log 의 레벨 수준

Log DEBUG > INFO > WARN > ERROR > FATAL 의 수준을 갖는다.

“com.foo” Logger 의 레벨이 INFO 로 설정되었을 경우

 

// com.foo Logger 가져오기

   Logger  logger = Logger.getLogger("com.foo");

 

   // Logger 레벨 설정하기 Logger 레벨은 대부분 설정파일에서 설정가능하며 프로그램적으로도 설정할 있다.

   logger.setLevel(Level.INFO);

 

// comm.foo.Bar Logger 가져오기, com.foo.Bar 레벨이 설정되어 있지 않기 때문에 부모 com.foo 레벨을 상속 받는다.

   Logger barlogger = Logger.getLogger("com.foo.Bar");

 

   // WARN >= INFO 때문에 로그는 사용된다.

   logger.warn("Low fuel level.");

 

   // DEBUG < INFO 때문에 로그는 사용되지 않는다.

   logger.debug("Starting search for nearest gas station.");

 

   // INFO >= INFO 때문에 로그는 사용된다.

   barlogger.info("Located nearest gas station.");

 

   // DEBUG < INFO 때문에 로그는 사용되지 않는다.

   barlogger.debug("Exiting gas station search");

 

 

Appender

 

Log4j 는 다양한 방법으로 로그를 남길 수 있도록 되어 있다. 예를 들어 콘솔화면, 파일, GUI 컴포넌트, remote socket server, JMS, NT Event Loggers, remote UNIX Syslog daemon 위에 나열한 하나 하나를 Appender 라고 한다. 하나의 Logger 에는 여러 개의 Appender 를 설정할 수 있다.

 

Appender Additivity

Logger 의 상속 처럼 Appender 또한 상속 관계를 가질 수 있는데 이를 Appender Additivity라고 한다. 이는 Logger 가 가지고 있는 additivity 의 설정 값에 따라 변경될 수 있다.

 

Logger
이름

설정된
Appenders

Additivity
Flag

적용

Appender

설명

root

A1

설정 불가

A1

Root additivity 값은 설정할 없다.

x

A-x1, A-x2

true

A1, A-x1, A-x2

additivity 값이 true 이므로 부모의 appender 사용하게 된다.

x.y

none

true

A1, A-x1, A-x2

additivity 값이 true 이므로 부모 x Logger 적용된 appender 사용하게 된다.

x.y.z

A-xyz1

true

A1, A-x1, A-x2, A-xyz1

additivity 값이 true 이므로 부모 x Logger 적용된 appender 사용하게 된다.

security

A-sec

false

A-sec

additivity 값이 false 이므로 부모의 appender 사용하지 않는다.

security.access

none

true

A-sec

Additivity 값이 true 이므로 부모의 적용된 appender 사용하게 된다.

 

 

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

URLClassLoader 사용하기  (0) 2010.04.20
: