2012-03-16 3 views
18

다른 응용 프로그램에서 사용할 다양한 기능을 모으는 라이브러리를 작성하고 있습니다. 라이브러리 사용자가 볼 수있는 로그 문을 생성해야합니다. 예를 들어 응용 프로그램을 만들고 라이브러리를 사용하고 있다면 라이브러리에서 내게 보이는 로그 문을 생성해야합니다. 어떻게해야합니까? 로그 파일은 응용 프로그램 개발자가 구성하므로 내 라이브러리는 기록 방법을 어떻게 알 수 있습니까?Logger for Java 라이브러리

+0

스프링 프레임 워크를 살펴보십시오. 특히, Dependency Injection 기능이 가장 유용합니다. – cdeszaq

답변

23

라이브러리을 개발중인 경우 다른 사람은 해당 응용 프로그램에 로깅 외관을 사용해야합니다. 그렇지 않으면 라이브러리 사용자가 자신의 응용 프로그램 용으로 선택한 프레임 워크 외에도 을 선택한 로깅 프레임 워크를 구성하고 포함하도록합니다. 예를 들어

당신은 log4j에를 사용하는 경우 그러나 당신의 라이브러리를 사용하는 개발자는 logback 그가 log4j 구성 파일과 log4j에 항아리를 포함하는 (또는 other measures을) 라이브러리 행복 할 것이다 사용합니다.

로깅 외관은 (아파치 코 몬즈 로깅에서)이 문제를 해결 :

가 정보를 기록하는 것은 매우 유용한 라이브러리를 작성. 그러나 많은 로깅 구현이 존재하며 라이브러리는 라이브러리가 일부인 전체 애플리케이션에 특정 로깅을 사용하지 못합니다.

로깅 패키지는 서로 다른 로깅 구현 간의 초박형 브리지입니다. commons-logging API를 사용하는 라이브러리는 런타임에 모든 로깅 구현과 함께 사용할 수 있습니다. Commons-logging은 널리 사용되는 많은 로깅 구현을 지원하며, 다른 사람들을 위해 어댑터를 작성하는 것은 상당히 간단한 작업입니다.

또는 SLF4J에서 추론 :

Java 또는 (SLF4J)에 대한 간단한 로깅 외관은 다양한 로깅 프레임 워크, 예를 들어,에 대한 간단한 외관이나 추상화 역할을

java.util.logging, log4j 및 logback을 사용하여 최종 사용자가 배포 시간에 원하는 로깅 프레임 워크에 연결할 수 있습니다.로깅 외관에 대한

후보자는 다음과 같습니다

  • SLF4J
  • +0

    귀하의 예는 오해의 소지가 있습니다. 개발자는 동시에 코드와 log4j 어댑터를 위해 SLF4J API를 사용할 수 있습니다. 그런 다음 그는 단지 로그백과 같은 SLF4J 백엔드를 선택합니다. 사실 이것이 SLF4J의 이유이기 때문에 매우 간단합니다. log4j 설정은 필요 없습니다. –

    +0

    @RostislavMatl SLF4J "브리징 모듈"(http://www.slf4j.org/legacy.html)에 대해 이야기하고 있습니까? 이를 통해 log4j, ...를 내부적으로 사용하는 라이브러리를 사용할 수 있으며 로그 메시지를 SLF4J (로그백에 의해 백업 될 수 있음)로 리디렉션 할 수 있습니다. 당신이 도서관의 사용자라면 이것은 분명히 훌륭한 특징입니다. 그러나 당신이 도서관의 개발자 일 때 왜 사용자가 그러한 농구를 뛰어 넘어야합니까? 파사드를 직접 사용하지 않는 이유는 무엇입니까? SLF4J 페이지에 나와있는 것처럼 이러한 솔루션은 "사용자의 통제를 벗어난 소프트웨어에 적합합니다". 내가 너를 잘못 이해했다면 나를 바로 잡아라. – Joe23

    +0

    분명히 우리는 다른 것들에 대해 이야기합니다. 당신은 다음과 같이 썼습니다 : "당신이 log4j를 사용한다면 라이브러리를 사용하는 개발자는 logback을 사용하여 log4j 설정을 포함해야합니다"- 그것은 사실이 아닙니다. 그리고 그것은 동시에 나쁜 해결책입니다. 새 코드를 개발하는 동안 SLF4J를 사용할 수 없다고 말하지 않았습니다. 나는 라이브러리 사용자 지점 또는보기를 선택했습니다. 왜냐하면 사용자와 제작자가 더 자주 있기 때문입니다. –

    2

    로깅 프레임 워크 구성에서 로그 파일의 위치가 패키지 외부에서 설정됩니다. 구성 파일은 일반적으로 classpath에 있습니다. 어떻게 보이는지는 어떤 로깅 프레임 워크를 사용하는지에 달려 있습니다. SLF4JLogback으로가는 것이 좋습니다. 이것에 대한