programing

Java에서의 로그업이란?

randomtip 2022. 9. 4. 13:27
반응형

Java에서의 로그업이란?

왜 다른 패키지가 아닌 다음 패키지 중 하나를 사용하는가?

  • Java 로깅
  • 커먼 로그
  • 로그4j
  • SLF4j
  • 로그백

API api aperance의 시간순서(내가 아는 한):

  • Log4j는 대부분의 사용자가 사용하기 때문에 (내 경험으로는)
  • Commons Logging은 오픈소스 프로젝트에서 사용하기 때문에(통합 솔루션에서 사용되는 로깅 프레임워크와 통합할 수 있습니다), 특히 API/Framework/OSS에서 Commons Logging을 사용하는 다른 패키지에 의존하는 경우 유효합니다.
  • Commons Logging은 특정 로깅 프레임워크에 대해 "잠금"하고 싶지 않기 때문에(대신 Commons Logging이 제공하는 것을 제한합니다), 이 점을 이유로 결정하는 것은 현명하지 않다고 생각합니다.
  • 추가 jar를 추가하지 않기 때문에 Java 로깅을 사용합니다.
  • SLF4j는 Commons Logging보다 최신이며 파라미터화된 로깅을 제공하므로 다음과 같습니다.

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를 직접 구현하기 때문에 파라미터화된 로깅을 지원합니다.
  • SLF4j/Logback은 log4j와 같은 사람이 썼기 때문에 그는 그것을 개선했습니다(Ken G-감사합니다).이전의 뉴스 투고를 보면 맞는 것 같습니다.)
  • SLF4j는 log4j 어댑터도 퍼블리시하기 때문에 이전 코드에서는 log4j를 "전환"할 필요가 없습니다.log4j.properties는 SLF4j를 사용하고, 그 구성을 실시합니다.

자바에서의 로그인은 혼란스럽고 일관성이 없으며 문서화가 불충분하며 특히 우발적이라는 것을 알게 되었습니다.게다가 이러한 로깅 프레임워크는 매우 유사하기 때문에 실제로 어떤 로깅 환경에 있는지 혼란이 발생합니다.특히 Java 웹 어플리케이션스택에서 작업하는 경우 한 번에 여러 로깅 환경에서 작업하는 경우가 많습니다(예를 들어 hibernate는 log4j 및 tomcat java.util.logging을 사용할 수 있습니다).Apache Commons는 서로 다른 로깅 프레임워크를 연결하는 것을 의미하지만, 실제로는 더 복잡해질 뿐입니다.이것을 미리 알지 못한다면, 그것은 완전히 당황스럽다.로그 메시지가 콘솔 등에 출력되지 않는 이유는 무엇입니까?오, 왜냐하면 나는 log4j가 아닌 Tomcat 로그를 보고 있기 때문입니다.또 하나의 복잡성이 더해지면서 어플리케이션서버에는 특정 웹 어플리케이션의 로컬Configuration을 인식하지 못하는 글로벌로깅 설정이 있는 경우가 있습니다.마지막으로 이들 로깅 프레임워크는 모두 너무 복잡합니다.자바 로그인은 혼란스럽고 혼란스러운 나 같은 개발자들을 혼란스럽게 만들고 있다.

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

이전에는 언급되지 않았던 중요한 요점이 하나 있습니다.

SLF4J(로깅 백엔드로서 Logback과 LOG4J 모두)는 이른바 Mapped Diagnostic Context(MDC, javadocdocumentation 참조)를 지원합니다.

이는 기본적으로 스레드 로컬 맵 <String,String>이며 이를 사용하여 로깅이벤트에 컨텍스트 정보를 추가할 수 있습니다.MDC의 현재 상태는 모든 이벤트에 부가됩니다.

이것은, 유저명과 요구의 URL(Webapp 의 경우)등의 정보를 입력해 두면, 매우 편리합니다.예를 들어 필터를 사용하여 이 작업을 자동으로 수행할 수 있습니다.

'오류를 기록하는 베스트 프랙티스는 무엇입니까?'라는 질문에 대한 답변도 참조하십시오.특히 다음과 같습니다.

  • Commons Logging에는 몇 가지 잠재적인 클래스 로딩 문제가 있습니다.

  • Log4J와 SLF4J는 Log4J에서 실제로 발견된 문제에서 학습한 동일한 사람에 의해 개발되었습니다.

당사의 프로젝트에서는 LOG4j를 사용하고 있으며, Stephen의 예시와 같이 매우 사용하기 쉽습니다.또, 독자적인 출력 파일 스키마를 작성할 수 있도록, LOG4j용의 패턴 클래스도 작성했습니다.로그 파일의 모양을 설명할 수 있습니다.원래 log4j 클래스를 향상시킬 수 있습니다.

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

Java logging은 제가 좋아하는 것은 아니지만, 처음부터 log4j를 사용하고 있기 때문일 수 있습니다.

Commons Logging 개요는 기본 로깅 프레임워크를 제어할 수 없는 경우 라이브러리 코드에서 로깅하는 이유를 제공합니다.외부 응용 프로그램에 링크되는 다양한 Apache 프로젝트에 매우 중요합니다.사내 IT프로젝트에서는 그다지 중요하지 않을 수 있습니다.이 프로젝트에서는, 완전한 제어를 실시할 수 있습니다.

그렇지만, 나는 Commons Logging에 편지를 쓰고, 내가 아는 다른 많은 개발자들처럼.그 이유는 정신적 부담을 최소화하기 위해서입니다.프로젝트나 직업을 바꿀 수 있기 때문에 새로운 프레임워크를 배울 필요가 없습니다(새로운 작업/프로젝트에서도 CL을 사용하고 있는 경우, 또는 그 중 하나로 이행하도록 설득할 수 있습니다).

또, 사용하는 프레임워크에 따라 독자적인 래퍼를 작성하는 것도 중요합니다.여기서 설명한 바와 같이 LogWrapper 객체를 사용하여 커스텀 문자열화(중요도)를 제공하고 로깅 문의 시각적 혼란을 최소화합니다(중요도 감소).

일반적으로 Log4J를 사용합니다.

Java 1.4에 의존하지 않는다면 Java Logging을 사용하고 싶지만 Log4J를 선호합니다.

Commons Logging을 이미 사용하고 있는 것을 강화하고 있다면 Commons Logging을 사용할 것입니다.

어떤 로깅 프레임워크에도 쓸 수 있는 얇은 로깅 파사드를 만들 것을 제안합니다.그러면 백업 엔진을 선택하는 것이 매우 어려워집니다.

언급URL : https://stackoverflow.com/questions/354837/whats-up-with-logging-in-java

반응형