[Spring Boot] log4j2.xml 파일

수빈·2024년 11월 28일

SpringBoot

목록 보기
4/4

이전 포스팅에서 작성했었던 log4j2.xml 파일의 내용에 대한것을 따로 작성해서 정리해두려 한다 !

log4j2.xml의 역할과 상세 설명

log4j2.xmlLog4j2 라이브러리에서 로그 출력 방식을 설정하는 파일이다.
애플리케이션의 로깅 동작을 커스터마이징하며, 로그의 출력 형식, 저장 위치, 필터링 레벨 등을 제어한다.
이 파일이 없을 경우 Log4j2는 기본 설정을 사용하여 로그를 출력한다.


파일의 역할

  1. 로그 출력 대상 정의 (Appenders)
    로그를 출력할 위치를 정의.
    예: 콘솔, 파일, 원격 서버 등.

  2. 로그 레벨 설정 (Loggers 및 Root Logger)
    로그의 심각도(레벨)에 따라 출력 여부를 결정.
    예: DEBUG, INFO, WARN, ERROR 등.

  3. 로그 형식 지정 (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>

주요 구성 요소와 역할

  1. <Configuration>

    <Configuration status="WARN">
    • 역할: Log4j2의 전체 설정을 감쌉니다.
    • status 속성: Log4j2 자체의 내부 상태 로그를 출력할 레벨.
      • 설정 파일의 문제를 디버깅하는 데 유용.
      • 일반적으로 WARN 또는 ERROR로 설정.
      • 디버깅 중이라면 status="DEBUG"로 변경하여 더 많은 정보를 확인할 수 있습니다.
  2. <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:
      • 이름: Console
      • 출력 대상: 콘솔(SYSTEM_OUT).
    • PatternLayout:
      • 로그 출력 형식을 정의.
      • %d: 로그 발생 시간.
      • %t: 쓰레드 이름.
      • %-5level: 로그 레벨(INFO, DEBUG 등).
      • %logger{36}: 클래스 이름(최대 36자).
      • %msg: 로그 메시지.
      • %n: 줄바꿈.
  3. <Loggers>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    • 역할: 로그 레벨 및 Appender 설정.
    • Root Logger:
      • 모든 로그의 기본 설정을 정의.
      • level="info":
        • INFO 레벨 이상의 로그만 출력.
        • 예: DEBUG는 출력되지 않음.
      • AppenderRef ref="Console":
        • 위에서 정의한 Console Appender에 로그를 전달.

잘못된 부분과 개선 사항

  1. 현재 문제점은 없음
    이 설정은 간단한 콘솔 출력용으로 적합합니다.

  2. 개선 사항: 파일 로깅 추가
    로그를 콘솔뿐만 아니라 파일에 저장하고 싶다면, 파일 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로 설정하면 기존 파일에 로그를 추가.

추가 설정 제안

  1. 로그 레벨 세분화
    특정 패키지나 클래스에 다른 로그 레벨을 적용하려면 <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": 부모 로거의 설정을 무시.
  2. 로그 압축 및 보관
    로그 파일이 일정 크기를 넘거나 일정 시간이 지나면 자동으로 압축 및 보관하도록 설정:

    <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>

profile
Development History

0개의 댓글