Spring Boot3 에서 Log4j2 세팅 방법
- 버전은 스프링 부트 3 현재 최신 버전 (2024-02-02) 을 기준으로 한다.
- 패키지 관리 도구는 Gradle 이용을 기준으로 한다.
스프링부트 기본 제공 Logback 을 의존성에서 제거
- Spring Boot 의 기본 로깅 도구 Logback 을 의존성에서 제거한다.
- dependencies 아래에 configurations 영역을 추가해주고 아래 내용을 붙여넣는다.
dependencies {
// ...
}
// 추가
configurations {
all*.exclude module: 'spring-boot-starter-logging'
}
의존성 제거 전
의존성 제거 후
spring-boot-starter-logging
이 사라진 것을 확인할 수 있다.
log4j2 의존성 추가하기
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}
환경별 log4j2.xml 파일 작성하기
- 이번 경우엔 ERROR 레벨부터 로깅하는 운영 환경과 INFO 레벨부터 로깅하는 개발 환경이 필요했다.
- 운영 환경에서는 기본 정책으로 매 시간마다 파일을 롤링한다.
- 개발 환경에서는 기본 정책으로 더 짧게 매 분마다 파일을 롤링한다.
log4j2-dev.xml
- 개발 환경의 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>
</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</FilePattern>
<PatternLayout>
<Pattern>${DEFAULT_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB"/>
<TimeBasedTriggeringPolicy interval = "1" modulate = "true"/>
</Policies>
</RollingFile>
<RollingFile name ="RollingFileErrorAppender">
<FileName>${LOG_PATH}/log4j2_error.log</FileName>
<FilePattern>${LOG_PATH}/log4j2_error.%d{yyyy-MM-dd-hh-mm}.%i.log</FilePattern>
<PatternLayout>
<Pattern>${DEFAULT_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB"/>
<TimeBasedTriggeringPolicy interval = "1" modulate = "true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- Root : 일반적인 로그 정책, 반드시 하나 정의해야함 -->
<Root level="INFO" additivity="false">
<AppenderRef ref="ConsoleAppender"/>
<AppenderRef ref="RollingFileAppender"/>
<AppenderRef ref="RollingFileErrorAppender" level="ERROR" />
</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>
log4j2-prod.xml
- 운영 환경의 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>
</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}.%i.log</FilePattern>
<PatternLayout>
<Pattern>${DEFAULT_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB"/>
<TimeBasedTriggeringPolicy interval = "1" modulate = "true"/>
</Policies>
</RollingFile>
<RollingFile name ="RollingFileErrorAppender">
<FileName>${LOG_PATH}/log4j2_error.log</FileName>
<FilePattern>${LOG_PATH}/log4j2_error.%d{yyyy-MM-dd-hh}.%i.log</FilePattern>
<PatternLayout>
<Pattern>${DEFAULT_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB"/>
<TimeBasedTriggeringPolicy interval = "1" modulate = "true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- Root : 일반적인 로그 정책, 반드시 하나 정의해야함 -->
<Root level="ERROR" additivity="false">
<AppenderRef ref="ConsoleAppender"/>
<AppenderRef ref="RollingFileAppender"/>
<AppenderRef ref="RollingFileErrorAppender" level="ERROR" />
</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>
application.yml 파일 설정하기
- application.yml 파일에서 각 profile 마다 사용할 log4j2 설정파일을 명시해준다.
로컬 환경 예시
spring:
config:
activate:
on-profile: local
logging:
config: classpath:log4j2-dev.xml
운영 환경 예시
spring:
config:
activate:
on-profile: prod
logging:
config: classpath:log4j2-prod.xml
반응형
'프레임워크 > 스프링 부트' 카테고리의 다른 글
간단한 스프링 부트 3 최초 실행 문제 해결 (Could not resolve org.springframework.boot:spring-boot-gradle-plugin) (0) | 2023.07.25 |
---|---|
스프링 부트 (Spring Boot) 란? (0) | 2023.03.18 |