Spring Boot3 Log4j2 (로깅) 세팅 및 사용 방법

차곡차곡·2024년 8월 20일
0

SpringBoot + React

목록 보기
9/9

0. 로그 레벨 설명

Log4j2란?
Apache Software Foundation에서 개발한 로그 라이브러리로, 애플리케이션의 동작을 기록하고 디버깅을 도와줌

Log level
1. ERROR : 오류 메시지 표시
2. WARN : 경고성 메시지 표시
3. INFO : 정보성 메시지 표시
4. DEBUG : 디버깅하기 위한 메시지 표시
5. TRACE : Debug보다 훨씬 상세한 메시지 표시
ex) log level을 INFO로 설정하면 INFO 이하(ERROR, WARN, INFO)의 로그가 출력된다.

1. build.gradle 의존성 추가

  • 로깅 라이브러리 충돌을 막기 위해 기본으로 제공되는 Logback은 제외처리 후, log4j2 추가
// log4j2
	implementation('org.springframework.boot:spring-boot-starter-log4j2') {
		exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
	}
    
    
// log4j2 사용을 위해 Logback 제거
configurations {
	all*.exclude module: 'spring-boot-starter-logging'
}

2. application.properties

  • 적어주지 않아도 작동은 되지만, 명시적으로 적어주면 안전하고 명확해짐
#log4j 설정 / 로깅 설정
logging.config=classpath:log4j2.xml

3. log4j2.xml

  • 리소스 위치에 넣어주면 된다.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
   <Properties>
       <Property name="LOG_PATH">logs</Property>
       <Property name="DEFAULT_PATTERN">[%d{yyyy-MM-dd HH:mm:ss.SSS}] %5p ${sys:PID} --- [%15.15t] %-40.40c{1.} : %m%n%xwEx</Property>
       <Property name="COLOR_PATTERN">[%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint}] %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c}{cyan} %clr{:}{faint} %m%n%xwEx</Property>
       <Property name="TEST_PATTERN">%d %5p [%c] %m%n</Property>
     <!--        <Property name="COLOR_PATTERN">[%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint}] %clr{%5p} %clr{${sys:PID}}{magenta} %clr{-&#45;&#45;}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx</Property>-->
   </Properties>

   <Appenders>
       <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
           <PatternLayout pattern="${COLOR_PATTERN}"/>
       </Console>

       <RollingFile name ="RollingFileAppender">
           <FileName>${LOG_PATH}/log4j2.log</FileName>
           <FilePattern>${LOG_PATH}/log4j2.%d{yyyy-MM-dd-hh-mm}.%i.log.gz</FilePattern>
           <PatternLayout>
               <Pattern>${DEFAULT_PATTERN}</Pattern>
           </PatternLayout>
           <Policies>
               <SizeBasedTriggeringPolicy size="100MB"/>
               <TimeBasedTriggeringPolicy interval = "1" modulate = "true"/>
           </Policies>
           <DefaultRolloverStrategy>
               <Delete basePath="${LOG_PATH}" maxDepth="1">
                   <IfAccumulatedFileCount exceeds="3"/>
               </Delete>
           </DefaultRolloverStrategy>
       </RollingFile>

   </Appenders>


   <Loggers>
     	<!-- Root : 일반적인 로그 정책, 반드시 하나 정의해야함 -->
       <Root level="INFO" additivity="false">
           <AppenderRef ref="ConsoleAppender"/>
           <AppenderRef ref="RollingFileAppender"/>
       </Root>      
     
       <!-- springframework logger -->
       <Logger name="org.springframework" level="INFO" additivity="false">
           <AppenderRef ref="ConsoleAppender" />
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>

       <!-- jdbc logger -->
       <Logger name="jdbc.sqlonly" level="OFF" additivity="false">
           <AppenderRef ref="ConsoleAppender"/>
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>

       <Logger name="jdbc.sqltiming" level="INFO" additivity="false">
           <AppenderRef ref="ConsoleAppender"/>
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>

       <Logger name="jdbc.resultsettable" level="INFO" additivity="false">
           <AppenderRef ref="ConsoleAppender"/>
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>

       <Logger name="jdbc.audit" level="OFF" additivity="false">
           <AppenderRef ref="ConsoleAppender"/>
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>

       <Logger name="jdbc.resultset" level="OFF" additivity="false">
           <AppenderRef ref="ConsoleAppender"/>
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>

       <Logger name="jdbc.connection" level="OFF" additivity="false">
           <AppenderRef ref="ConsoleAppender"/>
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>

   </Loggers>
</Configuration>
Properties
  • 로깅 패턴 및 기타 설정을 위한 속성들이 정의
  • 설정에는 로그 파일의 경로 및 파일명 패턴, 로그 메시지의 출력 형식 등 포함 가능

Appenders
  • 로그 이벤트가 어디에 기록될지를 정의
  • 해당 파일에서는 콘솔과 롤링 파일 두 가지 타입의 Appender가 정의됨

ConsoleAppender
  • 콘솔에 로그를 출력하는 Appender

RollingFileAppender
  • 파일에 로그를 기록하는 롤링 파일(Appender)으로 설정에 따라 파일의 크기 또는 시간에 따라 로그 파일 저장 가능

Loggers
  • 각 로거에 대한 설정

org.springframework Logger
  • 스프링 프레임워크에서 발생하는 로그를 관리
  • 여기서는 INFO 레벨 이상의 로그를 콘솔과 파일에 출력하도록 설정

jdbc.sqlonly, jdbc.sqltiming, jdbc.resultsettable, jdbc.audit, jdbc.resultset, jdbc.connection 등
  • 각각 다른 JDBC 작업에 대한 로그를 관리
  • 각 로거의 레벨은 OFF로 설정되어 있어 해당 작업에 대한 로그를 출력하지 않음

4. 사용법

  • 설정에 따라 기본 정보나 오류들은 콘솔에 잘 작동되지만, 특정 작업 시 sysout를 사용하지 않고 깔끔하게 출력을 원한다면 아래처럼 사용하면 된다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootApplication
public class BackApplication {

	public static void main(String[] args) {
		SpringApplication.run(BackApplication.class, args);

		log.info("Info level log message / 정보 메세지 예시");
		log.error("Error level log message / 오류 메세지 예시");
	}

}

참고사이트

https://velog.io/@fever-max/Spring-Boot3-Log4j2-%EB%A1%9C%EA%B9%85-%EC%84%B8%ED%8C%85-%EB%B0%8F-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95

profile
계단식 성장

0개의 댓글