문제

왜 다른 패키지 대신 다음 패키지 중 하나를 사용합니까?

  • 자바 로깅
  • 커먼즈 로깅
  • log4J
  • SLF4J
  • 로그백
도움이 되었습니까?

해결책

API Apperance의 시간순으로 (내가 아는 한) :

  • 대부분의 사람들이 그것을 사용하기 때문에 log4j (내 경험으로)
  • 오픈 소스 프로젝트를 사용하기 때문에 커먼즈 로깅 (통합 솔루션에 사용되는 로깅 프레임 워크와 통합 할 수 있습니다). API/Framework/OSS이고 커먼즈 로깅을 사용하는 다른 패키지에 의존하는 경우 특히 유효합니다.
  • 커먼즈 로깅은 특정 로깅 프레임 워크로 "고정"하고 싶지 않기 때문에 (대신 대신 커먼즈 로깅이 대신 제공되는지에 따라 고정) -이 점을 이유로 사용하는 것이 합리적이라고 생각하지 않습니다.
  • 추가 항아리를 추가하고 싶지 않기 때문에 Java 로깅.
  • SLF4J는 커먼즈 로깅보다 새롭고 매개 변수 로깅을 제공하기 때문에 :

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}
  • logback은 log4J보다 새롭기 때문에 SLF4J를 직접 구현하므로 매개 변수화 된 로깅을 지원합니다.
  • log4J를 한 같은 사람이 작성했기 때문에 SLF4J/LOGBACK이기 때문에 더 잘 만들었습니다. 켄 g - 감사해요. 볼 때 맞는 것 같습니다 그들의 이전 뉴스 게시물)
  • SLF4J는 LOG4J 어댑터를 게시하므로 이전 코드로 LOG4J를 "전환"할 필요가 없기 때문에 Log4J를 만듭니다 .Properties SLF4J를 사용하고 구성입니다.

다른 팁

나는 Java 로의 로그가 혼란스럽고 일관성이없고, 문서화되지 않았으며, 특히 우연한 일이라는 것을 알았습니다. 또한, 이러한 로깅 프레임 워크 사이에는 많은 유사성이있어 노력이 중복되고 실제로 어떤 로깅 환경이 있는지에 대한 혼란이 있습니다. 특히 심각한 Java 웹 애플리케이션 스택에서 작업하는 경우 종종 다수의 한 번에 로깅 환경; (예 : Hibernate는 log4j 및 tomcat java.util.logging을 사용할 수 있습니다). Apache Commons는 다양한 로깅 프레임 워크를 연결하기위한 것이지만 실제로는 더 복잡성을 더합니다. 미리 알지 못하면 완전히 당황합니다. 내 로그 메시지가 콘솔 등에 인쇄되지 않는 이유는 무엇입니까? 오, 나는 log4J가 아니라 Tomcat 로그를보고 있기 때문에. 다른 복잡성 계층을 추가하면 응용 프로그램 서버에는 특정 웹 응용 프로그램에 대한 로컬 구성을 인식하지 못하는 전역 로깅 구성이있을 수 있습니다. 마지막으로, 이러한 모든 로깅 프레임 워크는 너무 복잡합니다. Java를 기록하는 것은 나와 같은 개발자들이 좌절하고 혼란스러워하는 혼란 스러웠습니다.

Java의 초기 버전에는이 시나리오로 이어지는 내장 로깅 프레임 워크가 없었습니다.

전에 언급하지 않은 중요한 요점은 다음과 같습니다.

SLF4J (및 로깅 백엔드로 Logback 및 Log4J)가 소위 맵핑 된 진단 컨텍스트를 지원합니다 (MDC, 참조 Javadoc 그리고 선적 서류 비치).

이것은 본질적으로 스레드-로컬 맵입니다u003CString,String> 로깅 이벤트에 추가 컨텍스트 정보를 추가하는 데 사용할 수 있습니다. MDC의 현재 상태는 모든 이벤트에 첨부됩니다.

사용자 이름과 요청의 URL (웹 앱의 경우)과 같은 물건을 넣는 경우에도 매우 유용 할 수 있습니다. 예를 들어 필터를 사용하여 자동으로 수행 할 수 있습니다.

질문에 대한 답변도 참조하십시오 오류를 기록하는 모범 사례는 무엇입니까?, 특히:

  • 커먼즈 로깅에는 잠재적 인 클래스로드 문제가 있습니다.

  • LOG4J와 SLF4J는 같은 사람이 개발하여 로그4J에서 실제로 발견 된 문제로부터 학습했습니다.

회사 프로젝트에서는 Log4J를 사용하며 Stephen이 그의 예에서 보여준 것처럼 사용하기가 매우 쉽습니다. 또한 Log4J에 대한 자체 패턴 클래스를 작성하여 자신의 출력 파일 스키마를 만들 수 있습니다. 로그 파일의 모습을 설명 할 수 있습니다. 원래 log4J 클래스를 향상시킬 수 있습니다.

log4j.properties 파일에서 변경할 수있는 모든 log4j 속성이므로 다른 프로젝트에 다른 파일을 사용할 수 있습니다.

Java 로깅은 내가 호의적이지는 않지만 처음부터 log4j를 사용하기 때문일 수 있습니다.

그만큼 커먼즈 로깅 개요 기본 로깅 프레임 워크를 제어 할 수없는 경우 라이브러리 코드에서 로깅하는 이유 : 라이브러리 코드에서 로깅. 외부 응용 프로그램에 연결될 다양한 Apache 프로젝트에 매우 중요합니다. 아마도 완전한 제어 기능이있는 내부 IT 프로젝트에는 중요하지 않을 수 있습니다.

즉, 나는 내가 아는 다른 많은 개발자들과 마찬가지로 커먼즈 로깅에 글을 씁니다. 그 이유는 정신 수하물을 최소화하기위한 것입니다. 프로젝트 나 일자리를 변경할 수 있으며 새로운 프레임 워크를 배울 필요가 없습니다 (새로운 작업/프로젝트가 CL을 사용하거나/또는이를 사용하도록 설득 할 수 있습니다).

또한 사용하는 프레임 워크 주위에 자신만의 포장지를 만드는 데 약간의 가치가 있습니다. 설명한대로 여기, 나는 로그 래퍼 객체를 사용하여 사용자 정의 문자열 (중요)을 제공하고 로깅 문의 시각적 혼란을 최소화하고 싶다 (덜 중요하다).

일반적으로 log4J를 사용하는 것이 기본값입니다.

Java 1.4에 대한 의존성을 신경 쓰지 않으면 Java 로깅을 사용하지만 여전히 LOG4J를 선호합니다.

이미 사용한 것을 향상시키고 있다면 커먼즈 로깅을 사용합니다.

로깅 프레임 워크에 쓸 수있는 얇은 로깅 정면을 만드는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top