2012-05-09 5 views
4

프로젝트에서 여러 개의 오픈 소스 프레임 워크를 사용 중입니다. 각 프레임 워크는 일부 로깅 라이브러리를 사용합니다. 제 문제는 최종 산출물에 log4j (두 가지 버전으로 제공), 로그백 기능이있는 slf4j 및 물론 공통 로깅이 포함되어 있다는 것입니다. 라이브러리 수를 줄이는 방법을 찾고 있는데 메이븐의 pom 파일에서 로깅 라이브러리를 제외하고 로깅 메시지를 가로 채기 위해 slf4j를 구성 할 수 있습니까?프로젝트에서 로깅 라이브러리 수 줄이기

답변

2

Check this out

편집 좀 더 밀접하게 질문을 읽어 보시기 바랍니다. slf4j는 slf4j가 아닌 프로젝트를위한 레거시 브리지를 추가합니다. 하지만 런타임 경로에 종속 jar를 제공해야합니다. 다른 사람의 작업을 반복하지 않아도된다는 비용입니다.

내 생각에 말하자면 본질적으로 당신의 jvm에 링크가 필요한 모든 정규화 된 기호가 있다고 생각합니다. 일부 직설 부두가 부족하여 종속 라이브러리를 포함하여 여러분을 데려 갈 수는 없습니다.

+0

이 문제는 내 로깅과 관련이 없으며 log4j를 사용하고 있습니다. 다른 로깅 라이브러리는 3 자 라이브러리와 함께 제공됩니다. slf4j가 다른 로깅 메시지를 수신하고 캡처하도록 구성 할 수 있습니까? –

+0

그것이 제가 찾고 있던 것입니다. 힘내 친구 야. –

1

pax-logging을 살펴보십시오. 그것은 거의 모든 로깅 프레임 워크 인터페이스 (올바른 패키지 이름과 클래스 등)를 가져올 수 있습니다. 그러나은 구현하지 않습니다. 대신,이 facades를 log4j 백엔드에 연결합니다.

즉, 프로젝트는 원래의 로깅 프레임 워크를 계속 사용하지만, 이는 투명한 방식으로 log4j에 전달됩니다. 이렇게하면 로깅 결과가 일관되고 한 곳에서만 구성됩니다.

3

Slf4j에는 its manual에 몇 가지 정보가 있습니다.

난 당신이 찾고 메이븐의 모든 종속성에서 log4jcommons-logging을 제외하고 대신 log4j-over-slf4jjcl-over-slf4j 패키지를로드하는 것입니다 무엇을 생각합니다. log4jcommons-logging을 대체하도록 설계되었으며 Logger, Log 및 친구를 대체 할 적절한 org.apache.log4jorg.apache.commons.logging 클래스를 포함합니다. 이것은 라이브러리를 줄이지 않지만 모든 로그 출력을 sl4fj을 통해 저장합니다. 이 클래스의 사용을 제거하지 않는다면 (분명히) slf4j 래퍼 또는 원본에 대한 종속성을 줄일 수 없습니다.

대신 할 다음 하나 개 로깅 패키지 올바른 방법으로 사용하고자하는 경우 대신 로깅 위임자로 설계 commons-logging를 사용하도록 전환하고 다음 commons-logging에 잇는 slf4j-jcl 패키지를 사용할 수 있습니다.

후자의 경우 log4j이 필요한 각 종속성에 대해 종속성을이 방식으로 제외합니다.

<dependency> 
    <groupId>.../groupId> 
    <artifactId>...</artifactId> 
    <version>...</version> 
    <exclusions> 
     <exclusion> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
관련 문제