본문 바로가기

log4j

log4j와 commons.logging.log

일반적으로 log4j를 쓰기 위해 WEB-INF/lib에 log4j.jar와 WEB-INF/classes에
log4j.xml을 넣어둔다.

그렇게 되면 톰캣이 구동된 이후 해당 application에서는 위 log4j.xml 의 설정에 따라서
log4j를 사용해 로깅이 가능

final private static org.apahce.Log4j.Logger logger = org.apahce.Log4j.Logger.getLogger(KoreanStemFilter.class);


이것을 대신해서 아파치의 commons 를 사용 할 수도 있다.
final private static org.apache.commons.logging.Log logger = LogFactory.getLog(KoreanStemFilter.class);

아파치의 Commons Logging (JCL)은 commons-logging.properties 파일에 사용하게 될 구현체를
설정하지 않으면, 사용 가능한 로그를 자동으로 찾아 (분기..) 사용하게 된다. (Log4j나, JDK나..)


이것은 Log4j.xml이 없을 경우에는 Tomcat/conf에 있는
logging.properties 이 설정을 따라서 로깅이 된다.


웹 어플리케이션이 아니더라고
java.util의 로깅을 사용 할 수 있는데

이때는 jdk/lib에 있는 logging.properties에 있는 설정을 따르게 되고
이때는 debug대신에 fine을 사용하게 된다.

만일, 위 상황에서
commons-logging.jar를 클래스패스 root에 넣어두게 되면
logger.fine 대신 logger.debug를 사용하면 된다.

마찬가지로 java.util.Logging이나 org.apache.commons.logging.Log가
바라보는 설정은 jdk/lib가 되며

다만 fine이나 debug냐가 달라지는 것..


만일 Log4j.jar를 tomcat/lib에 넣어두면
톰캣이 구동되면서 jvm의 로깅이 아닌 Logj4를 사용해 최초 구동 로그가 올라가게 되고
이렇게 되면 당연히 톰캣이 바라보고 있는 곳에 Logj4.xml이 존재해야 한다.

하지만 이렇게 되면 Log4j.xml이 글로벌하게 잡히기 때문에
위 방식 보다는 각각의 context별로 log4j 설정을 잡아서 사용하는게 낫다.

도움 : 김풍주대리님