2012-01-20 1 views
2

be Spring Framework 문서에 따르면, 로깅은 Spring의 유일한 필수 의존성이다. 기본적으로 Apache Commons Logging을 사용하거나 대신 SLF4J 또는 Log4J를 사용하도록 구성 할 수 있습니다. 내 질문은 Spring을 사용하여 쓰고있는 응용 프로그램입니다. differnt logger 클래스를 사용하고 응용 프로그램에서 새 로거 객체를 인스턴스화하는 대신 Spring이 자체적으로 사용하는 로거에 대한 참조를 가져올 수 있습니까?스프링이 사용하는 로거에 대한 참조를 얻을 수 있습니까?

답변

4

확실한 로거는 이름으로 만 참조됩니다. 따라서 Spring이 "org.springframework.beans.abc"(예를 들어)를 로거 이름으로 사용한다면 같은 이름의 로거를 요청할 수도 있습니다. (스프링은 하나의 로거/이름을 사용하여 로깅하지 않습니다. 스프링에서 사용하는 것에 따라 여러 로깅을 사용합니다.)

그러나 이것을 권장하지 않습니다. 새로운 로거 객체를 인스턴스화하는 비용은 최소가되어야하며 이렇게하는 데 드는 비용 절감은 추가적인 혼란으로 상쇄됩니다. Spring 로그를 Spring 로거 이름으로 로그합니다. 코드는 코드에 고유 한 로거 이름에 로깅되어야합니다. 그렇지 않으면, 어떤 것이 기록되면 Spring 코드 나 코드에서 오는 것인지 어떻게 알 수 있습니까? 이것은 로거/카테고리 이름의 목적을 완전히 무효화합니다.

2

몇 가지 사항을 정리해야합니다. Apache Commons Logging은 로거 자체가 아닌 로깅 외관입니다. Spring 라이브러리는 특정 로깅 구현과의 연결을 피하기 위해이 Facade를 사용한다.

스프링 (또는 Apache Commons Logging을 사용하는 다른 것)은 SLF4J가 Apache Commons Logging을 위해 제공하는 브리지 구현을 제공함으로써 SLF4J를 사용하도록 구성 될 수 있습니다. SLF4J는 또한 로깅 (logging) 외관이지만 Apache Commons Logging보다 향상된 기능을 제공하며 개인적으로 코드 로깅을 위해 사용할 것을 권장합니다. SLF4J 로깅은 특정 로깅 구현과의 연결을 방지합니다.

SLF4J에 대한 자세한 내용은 해당 웹 사이트 http://www.slf4j.org에서 확인할 수 있습니다. SLF4J Manual의 첫 번째 페이지는 로거를 작성하고 사용하는 방법을 보여줍니다. 코드가 SLF4J 로거를 사용할 때 클래스 패스에 제공하는 slf4j 바인딩에 따라 Log4J, java.util.logging 또는 Logback과 같은 실제 로거에 런타임에 로깅을 위임합니다.

일반적으로 로깅의 경우, 각 로거의 이름을 사용하여 클래스의 정규화 된 클래스 이름을 사용하여 각기 다른 클래스에 대해 로거 이름을 지정하는 것이 일반적입니다. 이 원칙은 위에 링크 된 SLF4J 매뉴얼에서 설명됩니다.

관련 문제