log4j vs 로그 백 [닫힘]


152

자체 제작 래퍼 뒤에 log4j를 사용하고 있습니다. 우리는 지금 훨씬 더 많은 기능을 사용할 계획입니다.

로그 백으로 업데이트해야합니까?

(SLF4J와 같은 외관이 아닌 프레임 워크를 의미합니다)


1
로그 백은 자카르타 커먼즈 로깅과 매우 유사합니다. 주요 차이점은 무엇입니까?
matt b

12
SLF4J (외관)는 commons.logging과 비슷하게 들립니다. 주요 차이점은 SLF4J는 정적 바인딩을 사용하고 commons.logging은 일부 해결 전략을 사용한다는 것입니다. Logback (파사드의 "기본"(즉, 추가 래퍼 레이어가 없음) 구현)은 LOG4J와 비슷하지만 더 풍부한 API를 가지고 있습니다.
Huxi

답변:


190

로그 백은 기본적으로 SLF4J API를 구현합니다. 이는 로그 백을 사용하는 경우 실제로 SLF4J API를 사용하고 있음을 의미합니다. 이론적으로 로그 백 API의 내부를 로깅에 직접 사용할 수는 있지만 권장하지는 않습니다. 로거에 대한 모든 로그 백 문서 및 예제는 SLF4J API로 작성되었습니다.

따라서 로그 백을 사용하면 실제로 SLF4J를 사용하게되며 어떤 이유로 든 log4j로 다시 전환하려면 몇 분 안에 slf4j-log4j12.jar를 클래스 경로에 놓아서 몇 분 안에 그렇게 할 수 있습니다.

logback에서 log4j로 마이그레이션 할 때 특정 부분, 특히 logback.xml 구성 파일에 포함 된 부분 은 여전히 ​​log4j에 해당하는 부분 (예 : log4j.properties) 으로 마이그레이션해야합니다 . 다른 방향으로 마이그레이션 할 때 log4j 구성 (예 : log4j.properties )을 해당 로그 백으로 변환해야합니다. 이를 위한 온라인 도구 가 있습니다. 구성 파일 마이그레이션과 관련된 작업량은 모든 소프트웨어 소스 코드 및 해당 종속성 전체에 전파되는 로거 호출을 마이그레이션하는 데 필요한 작업보다 훨씬 적습니다.


28
널리 사용되는 소프트웨어 개발자에게 이야기 할 수있는 기회입니다. log4j에 감사합니다.
Srujan Kumar Gulla

7
면책 조항 :이 사람은 모든 Log4j, SLF4J 및 Logback의 최초 개발자입니다. 그러나 Log4j에서는 더 이상 작동하지 않습니다.
Victor Stafusa

56

당신은해야합니까? .

왜? Log4J 는 본질적으로 Logback에 의해 사용되지 않습니다 .

긴급한가요? 아마.

고통스럽지 않습니까? 아마,하지만 당신의 로깅 문에 따라 달라질 수 있습니다.

LogBack (또는 SLF4J)을 최대한 활용하려면 적절한 로깅 문 을 작성해야 합니다 . 이렇게하면 평가 지연으로 인해 코드가 빨라지고 경비원을 피할 수 있으므로 코드 줄이 줄어드는 등의 이점을 얻을 수 있습니다.

마지막으로 SLF4J를 적극 권장합니다. (왜 자신의 외관으로 바퀴를 재생성합니까?)


48
참고 : log4j 프로젝트는 log4j가 더 이상 사용되지 않는 것으로 간주하지 않습니다.
Thorbjørn Ravn Andersen

17
용어를 명확히해야합니다. 명백하게, log4j 프로젝트저자는 logback 이 log4j 의 후임자 로 간주 합니다. 두 프로젝트의 동일한 저자이므로 그의 의견은 어느 정도 무게를 지녀야합니다. "log4j 프로젝트"자체는 실제로 어떤 것도 "고려하지"않습니다. 현재 log4j와 관련된 사람들 그룹은 의견이 다양합니다 (일부는 실제로 동의하고, 일부는 의외로 동의하지 않습니다). SLF4J + Logback은 우리 뒤에 조금 더 많은 역사를 가지고 (원래 의견 후 3 년) Log4j에 대해 계속해서 발전하고 있습니다.
마이클

@michael_n Log4j 1은 한 사람이 작성하지 않았습니다. "같은 저자"라고 말하는 것은 잘못입니다. Ceki는 중요한 저자이며 의심 할 여지가 없지만 유일한 저자는 아닙니다. 사실 많은 사람들이 Log4j 1을 만드는 것을 도왔습니다.
Christian

@Christian은 "아주 쓰여지지 않았다 ...", 그것은 모든 아파치 프로젝트 (그리고 나의 자격, "log4j와 관련된 사람들의 현재 그룹")를 위해 암시되어야한다. 그럼에도 불구하고, 주석을 편집 할 수 있다면 위키 백과 기사도 언급했듯이 " 원래 제작 된 "이라고 말할 것 입니다. Re : "실제로 많은 사람들이 Log4j 1을 원래대로 만드는 데 도움을주었습니다." , 그것은 절대적으로, 명백하게 사실입니다 (즉, 더 나은지 나쁜지). 그리고 작은 방법으로 slf4j + logback의 시작에 기여 :-)
michael

3
그렇다면이 라이브러리 나 로깅 라이브러리를 놓고 싸우기 위해 무엇을해야합니까? 왜 우리는 라이브러리를 죽이거나 홍보하려고합니까? 하나는 다른 것보다 낫다는 합리적인 이유를 적어도 제공하십시오. 하나님, 스택 오버플로는 엉망입니다.
사용자

48

로깅 세계에는 Facades (Apache Commons Logging, slf4j 또는 심지어 Log4j 2.0 API)와 구현 (Log4j 1 + 2, java.util.logging, TinyLog, Logback)이 있습니다.

기본적으로 자체 제작 래퍼를 slf4j IF로 교체해야하며 어떤 이유로 든 만족하지 않는 경우에만 사용해야합니다. Apache Commons Logging은 실제로 최신 API를 제공하지 않지만 slf4j 및 새로운 Log4j 2 외관은이를 제공합니다. 상당히 많은 앱이 slf4j를 래퍼로 사용한다는 점을 감안할 때 그것을 사용하는 것이 합리적 일 수 있습니다.

slf4j는 slf4j 문서의 다음 예제와 같이 많은 훌륭한 API 설탕을 제공합니다.

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

변수 대체입니다. 이것은 Log4j 2에서도 지원됩니다.

그러나 slf4j는 로그 백을 유지 관리하는 QOS가 개발했음을 알아야합니다. Log4j 2.0은 Apache Software Foundation에서 구워졌습니다. 지난 3 년 동안 활기차고 활동적인 커뮤니티가 다시 성장했습니다. Apache Software Foundation에서 모든 보증을 제공하므로 오픈 소스에 만족한다면 Log4j 2를 직접 사용하기 위해 slf4j를 사용하는 것이 좋습니다.

참고 :

과거에는 log4j 1이 Logback이 진행되는 동안 적극적으로 유지되지 않았습니다. 그러나 오늘날 상황은 다릅니다. Log4j 2는 거의 정기적으로 활발하게 유지 보수 및 릴리스됩니다. 또한 많은 최신 기능이 포함되어 있으며 Logim보다 몇 가지 기능을 향상시킵니다. 이것은 때때로 맛의 문제 일 뿐이므로 자신의 결론을 이끌어 내야합니다.

Log4j 2.0의 새로운 기능에 대한 간단한 개요를 작성했습니다 : http://www.grobmeier.de/the-new-log4j-2-0-05122012.html

읽을 때 Log4j 2는 Logback뿐만 아니라 다른 로깅 프레임 워크에서도 영감을 얻었습니다. 그러나 코드베이스는 다릅니다. Log4j 1과 거의 아무것도 공유하지 않으며 Logback과 0을 공유합니다. 예를 들어 Log4j 2와 같은 일부 개선 사항은 후드 아래의 문자열 대신 바이트 스트림으로 작동합니다. 또한 재구성하는 동안 이벤트를 풀지 않습니다.

Log4j 2는 내가 알고있는 다른 프레임 워크보다 빠른 속도로 로깅 할 수 있습니다 : http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

그리고 여전히 사용자 커뮤니티는 Logbacks보다 훨씬 더 큰 것 같습니다 : http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

가장 좋은 아이디어는 달성하고자하는 것에 가장 적합한 로깅 프레임 워크를 선택하는 것입니다. 프로덕션 환경에서 로깅을 비활성화하고 내 앱에서 기본 로깅을 수행하면 전체 프레임 워크를 전환하지 않습니다. 그러나 로깅을 조금만 더하면 프레임 워크와 해당 개발자가 제공하는 기능을 살펴보십시오. QOS를 통해 Logback에 대한 상업적 지원을 받고 있지만 현재 Log4j 2에 대한 상업적 지원은 없습니다. 반면에 감사 로깅을 수행해야하고 비동기 어 펜더가 제공하는 고성능이 필요한 경우에는 다음과 같은 의미가 있습니다. log4j를 확인하십시오 .2.

모든 편안함에도 불구하고 외관은 항상 약간의 성능을 발휘합니다. 그것은 당신에게 전혀 영향을 미치지 않을 수도 있지만, 자원이 부족한 경우 가능한 모든 것을 저장해야 할 수도 있습니다.

요구 사항을 더 잘 알지 못하면 권장 사항을 제시하는 것이 거의 불가능합니다. 단지 : 많은 사람들이 전환했기 때문에 전환하지 마십시오. 가치가 있기 때문에 전환하십시오. 그리고 log4j가 죽었다는 주장은 더 이상 계산되지 않습니다. 살아 있고 덥습니다.

면책 조항 : 저는 현재 Apache Logging Services 부사장이며 log4j에도 참여하고 있습니다.


19

귀하의 질문에 정확하게 대답하지는 않지만 자체 제작 래퍼에서 벗어날 수 있다면 Hibernate가 (일반 로깅 대신) 전환 한 SLF4J (Simple Logging Facade for Java )가 있습니다.

SLF4J는 Jakarta Commons Logging (JCL)에서 관찰 된 클래스 로더 문제 나 메모리 누수로 고통받지 않습니다.

SLF4J는 JDK 로깅, log4j 및 로그 백을 지원합니다. 따라서 시간이 맞으면 log4j에서 logback으로 전환하는 것이 매우 쉽습니다.

편집 : 내가 명확하게하지 않은 사과. log4j 또는 logback 중에서 어려운 선택을하지 않아도되도록 SLF4J를 사용하는 것이 좋습니다.


3
나는 SLF4J를 알고있다. 그러나 나는 정면이 아닌 로깅 프레임 워크를 요청했습니다!

4
사과. 내가 제안한 것은 사용자 정의 파사드 대신 SLF4J를 사용하는 경우 log4j에서 logback으로 전환하는 것이 덜 고통 스럽다는 것입니다.
툴킷

그 인용의 출처는 무엇입니까? 커먼즈 로깅은 검증 된 구성 요소입니다. 나는 메모리 누수가 없었습니다.
Kshitiz Sharma

1
@KshitizSharma-내가 제공 한 SLF4J 문서 링크 : slf4j.org/manual.html
툴킷

13

당신의 결정은

  • 이러한 "더 많은 기능"에 대한 실제 요구; 과
  • 변경 구현 예상 비용

API가 "더 새롭고, 더 밝고, 더 좋다"는 이유만으로 API를 변경하려는 충동에 저항해야합니다. 나는 "깨지지 않으면 걷지 말아라"라는 정책을 따릅니다.

애플리케이션에 매우 정교한 로깅 프레임 워크가 필요한 경우 이유를 고려할 수 있습니다.


3

성숙 된 프로젝트 나 심지어 개발 단계에 깊은 프로젝트는 아마도 그러한 업그레이드로부터 얻는 것보다 더 느슨 할 것입니다 (IMHO). 로그 백은 확실히 여러 지점에서 훨씬 발전하지만 작업 시스템에서 완전히 교체 할 수있는 정도는 아닙니다. 나는 확실히 새로운 개발을 위해 로그 백을 고려할 것이지만, 기존의 log4j는 이미 최종 사용자를 만나고 만난 모든 것에 충분하고 성숙합니다. 이것은 매우 주관적이며, 비용은 본인이 부담해야합니다.

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