2012-01-25 4 views
2

JRuby on Rails 애플리케이션에 로그인 할 때 log4j를 사용하고 있습니다. 매번 응용 프로그램을 푸시하면 로그가 다른 최종 대상에 추가됩니다. 때때로 그것은 catalina.out입니다. 때로는 localhost-date.log입니다. 때로는 catalina-date.log입니다.JRuby + Tomcat6 + log4j를 사용하는 비 결정적 로깅

매번 같은 이유가 아닌 이유를 잘 모르겠습니다.

내 환경에서 로그가 신뢰할 수없는 이유를 확인할 수있는 것은 무엇입니까?

답변

3

이것은 꽤 이상합니다. 우연히 Apache Commons Logging도 사용 하시겠습니까?

그것은 어둠 속에서 그냥 짧은,하지만 때마다 나는 커먼즈 내가 바로 특별히 (Think again before adopting the commons-logging API를 참조하거나 더 포괄적 인 짝수 기억 후자와 잘 문서화 문제를 다시 로깅 log4j 및/또는 에 뭔가 이상한 경험 버전 Taxonomy of class loader problems encountered when using Jakarta Commons Logging)는 간결 log4j and the thread context classloader에 대한 delfuego의 대답에 요약 :

당신은 그들이 어리석게 힘든 시간이 발견이, 즉 것을,) log4j에 함께 주요 문제 (및 라이브러리를 로깅 아파치 코 몬즈 우연히 것으로 보인다 올바른 클래스 로더와 상호 작용하는 것은 이므로 사용 중입니다.

이 클래스 로더 문제의 본질을 감안할 때, 나는 그것이 즉, 현재 로깅에 배선을 종료하는 클래스 로더에 따라,뿐만 아니라 당신의 문제를 트립 상상할 수있는, 그것은 다른 로깅 속성 경로와 각각의 기본값을 검색 사용할 수 있습니다 뿐만 아니라, Why can't log4j find my properties file in a J2EE or WAR application?를 참조하십시오

짧은 대답을 다음의 log4j 클래스와 속성 파일이 동일한 클래스 로더의 범위 내에 있지 있습니다.

J2EE 또는 서블릿 컨테이너 은 Java 클래스 로딩 시스템을 사용합니다. Sun은 클래스 로딩 이 Java 2의 릴리스와 함께 작동하는 방식을 변경했습니다. Java 2에서 클래스 로더는 계층 적 부모 - 자식 관계로 으로 배열됩니다. 하위 클래스 로더 은 클래스 또는 리소스를 찾아야 할 때 먼저 부모에게 으로 요청을 위임합니다.

[...]

언급 된 문제점 (. 같이 Log4j의 도중에, Ceki Gülcü 작성자를 가지고 일어나는) 실제로 Simple Logging Facade for Java (SLF4J) 전환하여 해결하는 것이 용이뿐만 마찬가지로 delfuego 제안

[...] take-home 메시지는 의 새 로깅 프레임 워크 인 SL4J에 대한 주된 원동력 중 하나입니다. 이러한 문제를 완전히 제거하려면 입니다. 당신은 그것을 바꿔 놓고 당신의 삶이 더 쉽게 만들어 지길 원할 것입니다. .

마지막으로, 존의 모험 (현재 해결되지 않은 현재) Logging with log4j on tomcat jruby-rack for a Rails 3 application와 함께 각각의 문제뿐만 아니라 SL4J를 통해 가능한 솔루션을 암시하는 것 같다.

행운을 빈다.

관련 문제