본문 바로가기

개발환경

어느날 잘보이던 로그가 안보일때...

정말 황당한 현상이 발생했다. 바로 직전까지 잘 보이던 로그(commons-logging-1.1.1, log4j-1.2.16)가 갑자기 안보인다. 그래서 구글링도 해보고 Apache Commons Logging(JCL), Log4j 의 문서도 찾아 봤지만 내가 설정한 것과 별반 다를것이 없었다.

무려 2시간을 이것 저것 해보다가 아래와 같은 글을 볼 수 있었다.

WebSphere v7.0 에서 commons logging 이용 log4j 사용하기

commons logging을 통하여 log4j를 사용할때 클래스 로더 순서(모드)를 Parent Last로 놓아야 한다.

 

클래스 로더 순서에 대한 내용은 http://cafe.naver.com/devmaster/279 를 참고하세요. 

 

Parent Last로 놓을 수 없는 경우에는 아래와 같은 방법을 사용한다.

 

일단 Apache  홈페이지에서 다운 받은 commons logging을 사용하여 WebSphere Application Server에서 돌릴경우 동작을 하지 않는 이유는 <WAS_HOME>/plugins/com.ibm.ws.prereq.commons-logging.jar  에 (WAS v7.0기준) 있는 org.apache.commons.logging.Log 클래스와 org.apache.commons.logging.LogFactory 클래스가 먼저 로딩이 되기 때문이다.

후략 ...

참고: http://www.websphere.pe.kr/xe/?mid=was_info&page=4&document_srl=2668


즉, 동일한 클래스가 존재하고 원래의 클래스보다 다른 클래스가 먼저 로딩이 되기 때문에 동작하지 않을 것이라는 말인것 같다.
그래서 찾아봤다.


LogFactory로 검색을 해보면 두개가 검색이 된다.
하나는 commons-logging-1.1.1.jar 이고 또 하나는 jcl-over-slf4j-1.5.8.jar 이다.
흠. jcl-over-slf4j-1.5.8.jar 가 왜 갑자기 딸려 들어 왔을까? 궁금했다.


위의 종속관계 그래프에서 알 수 있듯이 로그가 안나오기 전에 Apache Tiles2를 적용하는 과정에서 jcl-over-slf4j-1.5.8.jar 가 딸려왔고 잘나오던 로그가 갑자기 먹통이 되었었던것 같다.

그래서 다음과 같이 메이븐 pom.xml 설정을 변경했다.

<dependency>

  <groupId>org.apache.tiles</groupId>

  <artifactId>tiles-core</artifactId>

  <version>${tiles.version}</version>

  <exclusions>

    <exclusion>

      <groupId>org.slf4j</groupId>

      <artifactId>jcl-over-slf4j</artifactId>

    </exclusion>

  </exclusions>

</dependency>


적용결과 로그가 잘나온다. 예전에도 이런일이 있었는데 그땐 commons-logging을 포기하고 Log4j로 선언했던것 같다. 이 글이 많은 사람들에게 해결의 실마리가 되었으면한다.