이전 포스팅에서 작성했었던 log4j2.xml 파일의 내용에 대한것을 따로 작성해서 정리해두려 한다 !
log4j2.xml의 역할과 상세 설명log4j2.xml은 Log4j2 라이브러리에서 로그 출력 방식을 설정하는 파일이다.
애플리케이션의 로깅 동작을 커스터마이징하며, 로그의 출력 형식, 저장 위치, 필터링 레벨 등을 제어한다.
이 파일이 없을 경우 Log4j2는 기본 설정을 사용하여 로그를 출력한다.
로그 출력 대상 정의 (Appenders)
로그를 출력할 위치를 정의.
예: 콘솔, 파일, 원격 서버 등.
로그 레벨 설정 (Loggers 및 Root Logger)
로그의 심각도(레벨)에 따라 출력 여부를 결정.
예: DEBUG, INFO, WARN, ERROR 등.
로그 형식 지정 (PatternLayout)
로그 메시지의 형식을 정의.
예: 날짜, 로그 레벨, 클래스 이름, 메시지 등 포함.
log4j2.xml 코드 분석<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<!-- 콘솔 로깅 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<!-- 기본 로그 설정 -->
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
<Configuration>
<Configuration status="WARN">
status 속성: Log4j2 자체의 내부 상태 로그를 출력할 레벨. WARN 또는 ERROR로 설정.status="DEBUG"로 변경하여 더 많은 정보를 확인할 수 있습니다.<Appenders>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
Console Appender:ConsoleSYSTEM_OUT).PatternLayout:%d: 로그 발생 시간.%t: 쓰레드 이름.%-5level: 로그 레벨(INFO, DEBUG 등).%logger{36}: 클래스 이름(최대 36자).%msg: 로그 메시지.%n: 줄바꿈.<Loggers>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
Root Logger:level="info":AppenderRef ref="Console":Console Appender에 로그를 전달.현재 문제점은 없음
이 설정은 간단한 콘솔 출력용으로 적합합니다.
개선 사항: 파일 로깅 추가
로그를 콘솔뿐만 아니라 파일에 저장하고 싶다면, 파일 Appender를 추가할 수 있습니다.
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="FileLogger" fileName="logs/app.log" append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="FileLogger"/>
</Root>
</Loggers>
File Appender:fileName: 로그 파일 경로.append: true로 설정하면 기존 파일에 로그를 추가.로그 레벨 세분화
특정 패키지나 클래스에 다른 로그 레벨을 적용하려면 <Logger>를 추가합니다.
<Loggers>
<Logger name="com.example" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
name: 패키지나 클래스 이름.level: 해당 패키지/클래스에서 출력할 로그 레벨.additivity="false": 부모 로거의 설정을 무시.로그 압축 및 보관
로그 파일이 일정 크기를 넘거나 일정 시간이 지나면 자동으로 압축 및 보관하도록 설정:
<RollingFile name="RollingFileLogger" fileName="logs/app.log" filePattern="logs/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>