자바 로깅 vs Log4J [닫기]


134

log4j 라이브러리를 Java 5 프로젝트에 추가하여 롤오버 설정이 멋진 파일에 대한 예외를 기록해 두는 것이 좋습니다. 아니면 표준 util.logging 기능도 작동합니까?

어떻게 생각해?


고려해야 할 수많은 log4j 1.2 잠금 문제는 stackoverflow.com/a/13144054/603516 을 참조하십시오 .
Vadzim

답변:


115

나는 당신이 묘사 할 필요에 대해 util.logging을 사용하는 것이 좋을 것이라고 말하고 싶습니다.

좋은 의사 결정 트리를 보려면 Log4j와 java.util.logging을 살펴보십시오.

질문 1 : SMTPHandler, NTEventLogHandler 또는 매우 편리한 FileHandler와 같이 Log4j에 JUL이 가지고 있지 않은 영리한 핸들러가 필요합니까?

질문 2 : 로깅 출력 형식을 자주 바꾸고 싶습니까? 쉽고 유연한 방법이 필요하십니까? 즉, Log4j의 PatternLayout이 필요합니까?

질문 3 : 프로덕션 환경에서 컴파일 및 배포 한 후 애플리케이션에서 복잡한 로깅 구성을 변경할 수있는 능력이 필요하십니까? "이 클래스의 심각한 메시지는 전자 메일을 통해 지원 담당자에게 전송됩니다. 클래스의 하위 집합의 심각한 메시지는 서버의 syslog 데몬에 기록됩니다. 클래스의 다른 하위 집합의 경고 메시지는 기록됩니다. 네트워크 드라이브 A의 파일에 연결 한 다음 모든 위치의 모든 메시지가 네트워크 드라이브 B의 파일에 기록됩니다 "? 그리고 당신은 당신이 이틀마다 그것을 조정 볼 수 있습니까?

위의 질문에 예라고 대답 할 수 있으면 Log4j로 이동하십시오. 당신이 그들 모두에게 확실하게 대답하지 않는다면, JUL은 충분하고 SDK에 이미 포함되어 있습니다.

즉, 요즘 거의 모든 프로젝트가 다른 라이브러리가 사용하기 때문에 log4j를 포함하여 중단되는 것처럼 보입니다.


1
훌륭한 설문지 기반 답변. 필요에 따라 각자 자신에게.
HopeKing

43

SLF4J ( Simple Logging Facade for Java) 를 사용하는 것이 좋습니다 . Log4J를 포함하는 다른 제공자를 지원하며 Apache Commons Logging의 대체물로 사용할 수 있습니다.


6
Commons Logging의 문제점은 무엇입니까?
Bart van Heukelom

5
@ 바트 반 Heukelom 및 의견 유권자- 기사를
Stephen C

4
@ Stephen C : 정보를 가져 주셔서 감사합니다.하지만 얼마 전에 배웠으며 가능할 때마다 SLF4J를 사용하고 있습니다. (내 의견은 보수적 인 발언이 아닌 실제 질문이었다.)
Bart van Heukelom

1
@Bart, Commons Logging은 사용할 패키지의 동적 검색을 사용합니다. SLF4J를 사용하려면 백엔드의 클래스가 필요합니다.
Thorbjørn Ravn Andersen

21

Log4j는 오랫동안 사용되어 왔으며 매우 잘 작동합니다. 나는 그것을 뒷받침 할 과학적 연구는 없지만 많은 클라이언트에서 본 것을 바탕으로 쉽게 다른 프레임 워크보다 많이 사용되는 로깅 프레임 워크입니다. 오랜 시간 동안 사용되어 왔으며 Next Big Logging Framework로 대체되지 않았습니다.

설정이 간단하고 기본 어 펜더 (출력)를 쉽게 배울 수 있습니다. 다음을 포함하여 사용 가능한 전체 호스트 추가자가 있습니다.

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. 작가

다른 사람. 자신 만의 어 펜더를 작성하는 것도 어렵지 않습니다. 또한 각 어 펜더에는 많은 유연성이있어 로그에 출력되는 내용을 구체적으로 제어 할 수 있습니다.

한 가지 참고 사항은 log4j 외에도 Apache Commons Logging을 사용할 때 일련의 클래스 로더 문제가 발생했습니다. 하나의 특정 응용 프로그램에만 사용되었지만 commons logging과 같은 추상화 계층을 사용할 때 유연성을 제공하는 대신 log4j 만 사용하는 것이 더 간단하다는 것을 알았습니다.

자세한 내용은이 기사를 참조하십시오 .

행운을 빕니다!


17

java.util.logging은 다른 수하물 중 일부가 제공하는 초과 수하물없이 포괄적 인 로깅 패키지를 제공합니다.


5
또한이되어 기본적으로 포함 하고 자바 자체에서 사용하는 (당신이 어쨌든 그것을 가지게됩니다!)
Anony - 무스 - 종료 될

7

log4j는 전반적으로 훨씬 좋은 패키지이며 java.util.logging에 포함 된 딸꾹질이 없습니다. logsj를 직접 사용하는 것이 commons logging을 사용하는 것보다 쉽다는 것이 두 번째입니다.


3
java.util.logging에있는 딸꾹질에 대해 더 구체적으로 설명해 주시겠습니까?
akber

동기화 된 메소드 로깅의 오버 헤드와 같은 것이 확실합니다. github.com/playframework/playframework/issues/6958bugs.openjdk.java.net/browse/JDK-8077846
Will Sargent

4

로깅 인터페이스로 Apache Commmons Logging 을 사용하는 것이 좋습니다 . 이렇게하면 언제든지 코드를 변경하지 않고도 원하는 때에 로깅 구현을 유연하게 전환 할 수 있습니다.


3

나는 log4j와 함께 갈 것이다. log4j의 가능성은 전혀 쓸모가 없습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.