Java 로깅 프레임워크
Java logging framework![]() |
Java 로깅 프레임워크는 Java 플랫폼용 컴퓨터 데이터 로깅 패키지입니다.이 문서에서는 범용 로깅 프레임워크에 대해 설명합니다.
로깅은 응용 프로그램에 의한 액티비티 기록을 의미하며 개발팀의 일반적인 문제입니다.로깅 프레임워크는 Java 플랫폼의 로깅 프로세스를 간소화하고 표준화합니다.특히 콘솔에 대한 명시적인 출력을 회피함으로써 유연성을 제공합니다(아래 부록 참조).로그가 기록되는 장소는 코드에 의존하지 않고 런타임에 커스터마이즈할 수 있습니다.
유감스럽게도 JDK는 원래 릴리스에 로깅을 포함하지 않았기 때문에 Java Logging API가 추가되었을 때 다른 여러 로깅 프레임워크가 널리 사용되었습니다.특히 Apache Commons Logging(JCL)과 Log4j.이로 인해 각각 다른 로깅 프레임워크를 사용하여 서로 다른 서드파티 라이브러리(JAR)를 통합할 때 문제가 발생하였습니다.이 문제를 해결하기 위해 플러그형 로깅 프레임워크(랩퍼)가 개발되었습니다.
기능의 개요
로깅은 일반적으로 Logger, Formatter 및 Appender(또는 핸들러)의 3가지 주요 부분으로 나뉩니다.
- Logger는 특정 메타데이터와 함께 로깅되는 메시지를 캡처하여 로깅 프레임워크에 전달합니다.
- 메시지를 수신하면 프레임워크는 포메터를 호출하여 출력용으로 포맷합니다.
- 그런 다음 프레임워크는 포맷된 메시지를 적절한 Appender/Handler에게 전달하여 폐기합니다.여기에는 콘솔 디스플레이 출력, 디스크에 쓰기, 데이터베이스에 추가 또는 전자 메일 생성 등이 포함될 수 있습니다.
Logging Framework by the Object Guy와 같은 단순한 로깅 프레임워크는 로거와 Appender를 결합합니다.이렇게 하면 기본 작업이 간소화되지만, 특히 여러 환경에서 프로젝트를 이동하는 경우 구성하기가 어렵습니다.
로거
로거는 출력 전송/저장 위치에 관계없이 응용 프로그램이 로그를 기록할 수 있도록 하는 개체입니다.응용 프로그램은 객체 또는 객체 및 옵션의 중대도 수준을 가진 예외를 지정된 이름/식별자로 로거 개체에 전달하여 메시지를 기록합니다.
이름.
로거에는 이름이 있습니다.보통 이름은 계층 구조로 구성되며, 마침표(.)는 레벨을 구분합니다.일반적인 방식은 로그를 수행하는 클래스 또는 패키지의 이름을 사용하는 것입니다.Log4j와 Java 로깅 API 모두 상위 계층의 핸들러를 정의할 수 있습니다.
예를 들어 로거의 이름은 " 입니다.com.sun.some.UsefulClass
". 핸들러는 다음 중 하나에 대해 정의할 수 있습니다.
com
com.sun
com.sun.some
com.sun.some.UsefulClass
이 스택의 어딘가에 핸들러가 정의되어 있는 한 로깅이 발생할 수 있습니다.예를 들어, 에 기록된 메시지com.sun.some.UsefulClass
로거, 에 의해 기록될 수 있습니다.com.sun
핸들러일반적으로 로거에 의해 생성된 메시지를 수신 및 처리하는 글로벌핸들러가 있어요
중요도 수준
메시지는 특정 수준에서 기록됩니다.공통 수준 이름은 Apache Commons Logging에서 복사됩니다(Java Logging API는 다른 수준 이름을 정의합니다).
레벨 | 묘사 |
---|---|
치명적 | 조기 종료의 원인이 되는 중대한 에러.이러한 정보는 상태 콘솔에 즉시 표시되어야 합니다. |
에러 | 기타 런타임 오류 또는 예기치 않은 상태.이러한 정보는 상태 콘솔에 즉시 표시되어야 합니다. |
경고 | 사용되지 않는 API의 사용, API의 부적절한 사용, '거의' 오류, 바람직하지 않거나 예기치 않은 기타 런타임 상황, 그러나 반드시 "잘못된" 상황은 아닙니다.이러한 정보는 상태 콘솔에 즉시 표시되어야 합니다. |
정보 | 대상 런타임 이벤트(시작/종료)이러한 정보는 콘솔에서 바로 볼 수 있도록 주의하여 최소한으로 유지하십시오. |
디버깅 | 시스템 흐름 상세 정보로그에만 기록될 것으로 예상합니다. |
추적하다 | 자세한 것은, 을 참조.로그에만 기록될 것으로 예상합니다. |
로깅 프레임워크는 각 로거의 현재 로깅 수준을 유지합니다.로깅 레벨은 어느 정도 제한적으로 설정할 수 있습니다.예를 들어 로그 레벨이 "WARNING"으로 설정되어 있는 경우 해당 레벨 이상의 모든 메시지(ERROR 및 FATAL)가 기록됩니다.
심각도 수준은 로거와 추가 모두에 할당할 수 있습니다.출력을 생성하려면 지정된 중대도 수준에서 둘 다 활성화해야 합니다.따라서 메시지를 받은 핸들러도 디버깅이 네이블로 되어 있지 않으면 디버깅 출력에 네이블로 되어 있는 로거는 출력을 생성하지 않습니다.
필터
필터를 사용하면 로그 이벤트가 무시되거나 기록됩니다.가장 일반적으로 사용되는 필터는 이전 섹션에서 설명한 로깅 수준입니다.Log4j 2 및 SLF4J와 같은 로깅 프레임워크에서도 마커를 사용할 수 있습니다.이 마커는 로그이벤트에 첨부되어 있으면 필터링에도 사용할 수 있습니다.필터는 예외 발생, 로그 메시지 내의 데이터, 로깅 API를 통해 공개되는 스레드 로컬 내의 데이터 또는 기타 다양한 메서드에 따라 로그이벤트를 허용 또는 거부하기 위해 사용할 수도 있습니다.
포맷터, 레이아웃 또는 렌더러
포메터는 지정된 개체의 형식을 지정하는 개체입니다.대부분의 경우 바이너리 객체를 가져와 문자열 표현으로 변환합니다.각 프레임워크는 필요에 따라 덮어쓸 수 있는 기본 출력 형식을 정의합니다.
부록 또는 핸들러
첨부자는 지정된 최소 심각도 수준 이상의 메시지를 수신합니다.Appender는 전달된 메시지를 받아 적절히 게시합니다.메시지 배열은 다음과 같습니다.
- 콘솔에 표시
- 파일 또는 syslog에 쓰기
- 데이터베이스 테이블에 추가
- Java Messaging Services를 통해 배포
- 이메일로 보내다
- 소켓에 쓰다
- "bit-filength"(/dev/filength)로 폐기합니다.
기능 비교
프레임워크 | 유형 | 지원되는 로그 수준 | 표준 부록 | 평. | 비용 / 라이선스 |
---|---|---|---|---|---|
로그4j | 로깅 프레임워크 | FATAL ERROR WARN INFO DEBUG TRACE | 나열할 수 없는 수:부록 매뉴얼 참조 | 많은 프로젝트 및 플랫폼에서 널리 사용됩니다.Log4j 1은 2015년에 "End of Life"로 선언되어 다른 로깅 구현과 함께 사용할 수 있는 API를 제공하는 Log4j 2로 대체되었습니다. | Apache 라이센스 버전 2.0 |
Java 로깅 API | 로깅 프레임워크 | SEVERE WARNING INFO CONFIG FINE FINER FINEST | Sun의 기본 Java Virtual Machine(JVM)에는 다음이 있습니다.Console Handler, File Handler, Socket Handler, Memory Handler | JRE와 함께 제공 | |
작은 로그 | 로깅 프레임워크 | ERROR WARNING INFO DEBUG TRACE | ConsoleWriter, FileWriter, LogcatWriter, JdbcWriter, RollingFileWriter, SharedFileWriter 및 null(모든 로그 엔트리를 폐기) | Apache 라이센스 버전 2.0 | |
로그백 | 로깅 프레임워크 | ERROR WARN INFO DEBUG TRACE | 나열할 수 있는 항목이 너무 많습니다. Appender JavaDoc을 참조하십시오. | Log4j를 대체하기 위해 개발되었으며 많은 개선사항이 있습니다.Akka, Apache Camel, Apache Cocoon, Architory, Gradle, Lift Framework, Play Framework, Scalatra, SonarQube, Spring Boot 등 많은 프로젝트에서 사용됩니다. | LGPL 버전 2.1 |
Apache Commons Logging(JCL) | 로깅 래퍼 | FATAL ERROR WARN INFO DEBUG TRACE | 기본 프레임워크에 따라 다름 | Log4j와 연계하여 널리 사용 | Apache 라이센스 버전 2.0 |
SLF4J | 로깅 래퍼 | ERROR WARN INFO DEBUG TRACE | 플러그 가능한 기본 프레임워크에 따라 다릅니다.JCL, JDK 및 Log4j 로깅 패키지에 API 호환 심을 제공합니다.또한 이들 중 하나를 사용하여 출력을 생성할 수도 있습니다.기본적으로는 로그백을 출력에 사용합니다(사용 가능한 경우). | 많은 프로젝트 및 플랫폼에서 널리 사용되며, Logback을 구현으로 사용하는 경우가 많습니다. | MIT 라이선스 |
고려 사항.
JCL과 Log4j는 단순히 오랜 기간 동안 존재했고 오랜 기간 동안 유일한 선택이었기 때문에 매우 흔합니다.slf4j(아래에 Logback을 사용)의 유연성으로 인해 인기 있는 선택이 되었습니다.
SLF4J는 다른 프레임워크를 모방할 수 있는 로깅 래퍼(또는 심) 세트입니다.따라서 각자가 사용하기로 선택한 로깅 프레임워크에 관계없이 여러 개의 서드파티 라이브러리를 하나의 애플리케이션에 통합할 수 있습니다.그러나 모든 로깅 출력은 일반적으로 Logback을 통해 표준 방식으로 생성됩니다.
Log4j 2는 API와 구현을 모두 제공합니다.API는 SLF4J의 동작과 동등한 다른 로깅 구현으로 라우팅할 수 있습니다.SLF4J와 달리 Log4j 2 API는 Strings 대신 Message 객체를 기록하여[2] 유연성을 높입니다.또한 Java Lambda [3]표현도 지원합니다.
JCL은 로깅 프레임워크가 아니라 하나의 래퍼입니다.따라서 그 아래에 로깅 프레임워크가 필요합니다.단, 디폴트로는 독자적인 것을 사용하는 경우가 있습니다.SimpleLog
로거
JCL, SLF4J 및 Log4j 2 API는 응용 프로그램이 사용하는 기본 로깅 시스템에 써야 하는 재사용 가능한 라이브러리를 개발할 때 유용합니다.또한 로깅 프레임워크가 변경되기 쉬운 이기종 환경에서도 유연성이 제공되지만 대부분의 경우 로깅 프레임워크가 선택되면 프로젝트 기간 동안 변경할 필요가 거의 없습니다.SLF4J 및 Log4j 2는 새로운 기능의 이점을 제공하며 오래된 프레임워크에서 얻은 교훈을 기반으로 합니다.또한 JCL은 랩해야 할 로깅 라이브러리를 결정할 때 클래스 로더의 문제를 알고 있습니다.이러한 라이브러리는 JCL을 [5]대체하게 되었습니다.
Java Logging API는 Java와 함께 제공됩니다.API는 기술적으로 Java에서 제공되는 기본 구현과는 별개이지만 이를 대체 구현으로 대체하는 것은 어려울 수 있습니다. 따라서 많은 개발자들은 이 구현을 Java Logging API와 혼동합니다.설정은 외부 파일만으로 이루어집니다.즉석에서 쉽게 변경할 수 없습니다(다른 프레임워크는 프로그램 구성을 지원합니다).디폴트 실장에서는, 몇개의 핸들러와 포맷터만이 준비되어 있기 때문에, 대부분의 유저가 독자적인 [6]것을 쓸 필요가 있습니다.
「 」를 참조해 주세요.
레퍼런스
외부 링크
- Java 6.0 로깅 API
- 커먼 로그
- 프로토매터
- Java의 오픈 소스 로깅 도구
- Apache 2.0 라이센스.
- Logback - 널리 사용되는 Log4j 프로젝트의 후속 버전
- tinylog - 스태틱로거를 사용한 미니멀리스트 로깅 유틸리티
- Logigifier .class, .jar 및 .ear 파일에 로깅 코드를 삽입하는 도구입니다.
- JLV - 현재 Eclipse IDE 플러그인으로 사용 가능한 Java 로깅 뷰어
- 퍼포먼스4j
- SLF4J
- Log4j 2