Log4j Summary
프로그래밍/common 2010. 4. 20. 12:31Log4j 는 세개의 컴포넌트를 가진다.
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 |
설정된 |
Additivity |
적용 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 |
---|