spring boot

Log4j2를 이용한 로깅(logging) 방법 - II

hoazzinews 2024. 12. 11. 13:59

지난 시간에는 log4j2를 사용하기 위한 설정 방법 및 기본 사용 방법에 대해서 살펴봤습니다.

https://hoazzinews.tistory.com/37

 

Log4j2를 이용한 로깅(logging) 방법 - I

애플리케이션의 로그는 개발 중에는 디버깅을 위해서 주로 사용되지만, 애플리케이션이 배포된 후에는 애플리케이션의 상태를 모니터링하기 위한 용도로 사용됩니다. 서버에 애플리케이션을

hoazzinews.tistory.com

 

이번 시간에는 로그를 콘솔창외에 파일로 저장하는 방법에 대해서 살펴보겠습니다.

 

콘솔창에 출력되는 로그는 휘발성으로 로그가 많아지면 삭제되는 문제가 있습니다. 개발 시점에는 로그가 삭제돼도 문제가 없으나, 서버에 배포 후에는 로그가 삭제된다면 추후 로그를 확인할 수 없습니다. 따라서 로그를 파일에 저장하고 개발자는 모니터링 또는 분석할 수 있어야 합니다.

 

1. 'log4j2-dev-file.xml' 생성

프로젝트에서 'log4j2-local.xml'을 복사해서 'log4j2-dev-file.xml' 파일을 만듭니다.

※ 참고. 'log4j2-local.xml' 파일을 사용하지 않고 'log4j2-dev-file.xml' 파일을 사용하는 이유는 학습을 위해서 나중에 비교해 보기 위한 목적과 로컬에서는 'log4j2-local.xml'를 사용해서 콘솔에서만 로그를 확인하고 서버에 배포한 후에는 파일에 저장하기 위함입니다.

 

'log4j2-dev-file.xml' 파일을 만듭니다.

 

2.  애플리케이션에서 'log4j2-dev-file.xml' 파일을 사용하도록 설정

application.properties 파일에서 logging.config를 수정해서 'log4j2-dev-file.xml' 파일을 사용하도록 합니다.

... 중략

# log4j2
#logging.config=classpath:logger/log4j2-local.xml
logging.config=classpath:logger/log4j2-dev-file.xml

 

3. 로그 파일 저장 경로 설정

'log4j2-dev-file.xml' 파일의 <Properties>에 로그 파일 저장 경로(logs)를 설정합니다.

<Properties>
    <!-- 로그 패턴 설정 -->
    <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %-5p [%c{1}] - %m%n</Property>
        
    <!-- 로그 파일 경로 -->
    <Property name="LOG_PATH">logs</Property>
        
</Properties>

로그 파일은 프로젝트의 'logs' 디렉터리에 저장될 예정입니다.

 

4. File Appender 추가

지금은 'log4j2-dev-file.xml' 파일의 <Appenders>에 <Console>만 있기 때문에 로그가 콘솔창에만 출력되고 있습니다. 여기에 <File>을 추가해서 로그가 파일에도 기록될 수 있도록 합니다.

<Appenders>
    <!-- 콘솔 출력 -->
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="${LOG_PATTERN}"/>
    </Console>
        
    <!-- 로그 파일 기록 --> 
    <File name="FileByInfo" fileName="${LOG_PATH}/spring-info.log">
        <PatternLayout pattern="${LOG_PATTERN}"/>
        <Filters>
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        </Filters>
    </File>
</Appenders>

<File>을 이용해서 spring-info.log 파일에 로그가 저장되도록 했습니다. 그리고 <Filters>를 이용해서 로그 레벨(level)을 'INFO'로 설정했습니다. 이렇게 하면 'INFO' 이상의 로그들(INFO. WARN, ERROR)이 모두 파일에 기록 됩니다.

 

5. <Loggers>에 File 어펜더 추가

위에서 만든 File 어벤더를 <Loggers>에 추가해서 콘솔외에 파일에도 로그가 저장되도록 합니다.

<Loggers>
    <!-- 기본 로거 설정 -->
    <Root level="info">
        <AppenderRef ref="Console"/>
        <AppenderRef ref="FileByInfo"/>
    </Root>
</Loggers>

 

설정이 모두 끝났습니다. 정리하면 로그를 파일에 저장하기 위해서 <File> 어펜더를 추가하고 이를 <Root>에서 참조(<AppenderRef>)하도록 했습니다. 그리고 로그 파일의 위치는 'LOG_PATH' 변수에 저장한 'logs'이고, 파일의 이름음 'spring-info.log'로 설정했습니다.

 

6. 실행 결과

프로젝트를 실행해서 우선 콘솔창을 확인합니다.

콘솔창에 로그가 출력됐습니다.

 

콘솔창에 로그가 정상적으로 출력됐습니다. 다음으로 파일 저장을 확인합니다.

프로젝트를 'Refresh'합니다.
logs 디렉터리와 spring-info.log 파일이 생성된 것을 확인합니다.

 

spring-info.log 파일을 메모장 등에서 열어보면 콘솔창에 출력된 로그와 동일 로그가 기록된 것을 확인할 수 있습니다.

spring-info.log 파일에 로그가 기록 됐습니다.

 

HomeController의 로그도 확인해 보기 위해서 브라우저에서 접속해 보겠습니다.

브라우저에서 접속합니다.

 

콘솔창에 home() 로그가 추가로 출력됐습니다.

 

spring-info.log 파일에 home() 로그가 추가로 기록 됐습니다.

 

이번 시간에는 log4j2를 사용할 때 콘솔창외에 파일에 로그를 기록하는 방법에 대해서 살펴봤습니다. 다음 시간에는 '애플리케이션 로그'와 '루트 로그'를 분리해서 파일에 저장하는 방법에 대해서 살펴보겠습니다.

 

이전 글: Log4j2를 이용한 로깅(logging) 방법 - I

다음 글: Log4j2를 이용한 로깅(logging) 방법 - III