1 Log4j2
- Log4j2는 Apache Software Foundation에서 개발한 자바 기반 로깅 프레임워크입니다.
- 기존 Log4j의 후속 버전으로, 성능과 기능이 대폭 향상되었습니다.
- 비동기 로깅 지원으로 높은 성능을 제공합니다.
- Log4j2는 SLF4J(Simple Logging Facade for Java)와 Apache Commons Logging (JCL)의 구현체입니다.
2 Log4j2 소개
- Log4j2는 고성능 로깅을 위해 설계된 자바 기반 로깅 프레임워크입니다.
- 비동기 로깅을 지원하여 애플리케이션 성능에 미치는 영향을 최소화합니다.
- 다양한 설정 파일 형식을 지원하여 유연한 구성을 제공합니다.
- 고급 필터링 및 동적 로그 레벨 변경 기능을 통해 로그를 세밀하게 제어할 수 있습니다.
3 주요 기능
3.1 비동기 로깅
- Log4j2는 비동기 로깅을 통해 로그 성능을 극대화합니다.
- 비동기 로깅은 로그 이벤트를 별도의 스레드에서 처리하여 애플리케이션 성능 저하를 최소화합니다.
3.2 고급 필터링
- 다양한 필터링 옵션을 제공하여 로그를 세밀하게 제어할 수 있습니다.
- 필터는 로그 이벤트를 허용하거나 거부하는 역할을 하며, 여러 단계에서 적용될 수 있습니다.
3.3 동적 로그 레벨 변경
- 애플리케이션 실행 중에도 로그 레벨을 동적으로 변경할 수 있습니다.
- 이 기능을 통해 애플리케이션의 로깅 동작을 실시간으로 조정할 수 있습니다.
3.4 다양한 설정 파일 형식
- XML, JSON, YAML 형식의 설정 파일을 지원합니다.
- 설정 파일을 통해 로거, 앱렌더, 레이아웃 등을 유연하게 구성할 수 있습니다.
4 설정 파일 구조
- Log4j2 설정 파일은 주로 XML, JSON, YAML 형식으로 작성됩니다.
- 설정 파일은 다음과 같은 주요 요소로 구성됩니다:
4.1 Configuration
- 설정 파일의 루트 요소입니다.
속성
- 레퍼런스
- status
- 설정 파일이 처리되는 동안 발생하는 내부 로그 메시지 의 수준을 지정합니다.
- 가능한 값:
OFF
,FATAL
,ERROR
,WARN
,INFO
,DEBUG
,TRACE
,ALL
- name
- 설정의 이름을 지정합니다.
- 이 속성은 일반적으로 설정의 식별자 역할을 합니다.
- packages
- 추가적인 플러그인 패키지 경로를 지정합니다.
- 플러그인은 커스텀 앱렌더, 레이아웃, 필터 등을 정의할 때 사용됩니다
4.2 Properties
- 로그 파일 경로, 패턴 등 전역적으로 사용할 수 있는 속성을 정의합니다.
4.3 Appenders
- 로그 메시지를 출력할 대상을 정의합니다.
- 콘솔, 파일, 원격 서버 등 다양한 출력을 지원합니다.
4.4 Loggers
- 로그 메시지를 생성할 로거를 정의합니다.
- 루트 로거와 패키지별 로거를 설정할 수 있습니다.
5 설정 예시
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="logDir">logs</Property>
<Property name="logPattern">%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${logPattern}"/>
</Console>
<File name="File" fileName="${logDir}/app.log">
<PatternLayout pattern="${logPattern}"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
<Logger name="com.example" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
</Loggers>
</Configuration>
- 다음은 Log4j2 설정 파일의 예시입니다.
- 이 예시는 콘솔과 파일로 로그를 출력하도록 설정합니다.
logDir
속성을 사용하여 로그 파일의 디렉토리를 지정하고,logPattern
속성을 통해 로그 형식을 정의합니다.Appenders
섹션에서는 콘솔과 파일 출력 방식을 정의하고,Loggers
섹션에서는 기본 루트 로거와 특정 패키지(com.example
)에 대한 로거를 설정합니다.
6 Log4j2의 주요 로깅 레벨
- OFF: 로깅을 완전히 비활성화합니다.
- FATAL: 치명적인 오류가 발생했을 때 사용합니다. 시스템이 중단될 위험이 있는 상황을 나타냅니다.
- ERROR: 오류가 발생했을 때 사용합니다. 일반적인 오류 상황을 나타냅니다.
- WARN: 경고 메시지를 나타냅니다. 오류는 아니지만 주의가 필요한 상황을 나타냅니다.
- INFO: 정보성 메시지를 나타냅니다. 애플리케이션의 정상적인 동작을 기록할 때 사용합니다.
- DEBUG: 디버깅을 위한 상세한 정보를 나타냅니다. 개발 및 디버깅 과정에서 유용한 정보를 기록합니다.
- TRACE: 매우 상세한 디버깅 정보를 나타냅니다. 세밀한 추적이 필요한 경우 사용합니다.
- ALL: 모든 레벨의 로그를 출력합니다.
- 이들 로깅 레벨은 로그 메시지의 중요도에 따라 계층 구조를 가지며, 특정 레벨을 설정하면 그 이상의 중요도를 가진 모든 로그 메시지가 출력됩니다.
- 예를 들어, 로그 레벨을
INFO
로 설정하면INFO
,WARN
,ERROR
,FATAL
레벨의 로그 메시지가 출력됩니다.
참고 자료