안녕하세요.
#yeoneeblog 여니입니다:)
1.Dependency
우선 SpringBoot에서 기본으로 제공되며, 기본으로 설정되어있는 slf4j log구현 클래스인 logback 라이브러리를 제외시켜주어야 합니다.
1) logback 라이브러리 제외
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
저같은 경우엔, 해당 exclusions태그를 dependency 가장 상단에 spring-boot-starter-web아래에 붙여 주었습니다.
1-1) 변경전
spring-boot-starter-logging 존재 확인
1-2) 변경후
spring-boot-starter-logging 사라진거 확인
2) log4j2 라이브러리 추가
log4j2 라이브러리를 추가해줍니다.
<!--2.1 logging -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2. log4j2 설정 (log4j2.xml)
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{---}{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>
여기서 내가 필요한 log만 찍힐 수 있게 부분 삭제할 수 있습니다.
로그 출력 되는 것 확인
Appenders
Console : 콘솔에 찍힐 로그
RollingFile : 파일로 저장될 로그
FileName : log 파일경로, 파일명
FilePattern : rolling 파일경로, 파일명, 패턴주기
※ 개인적으로 제가 사용한 방법은 패턴주기에 변동을 주어 내가 설정한 log4j가 제대로 먹히는지 확인할 수 있었습니다.
*패턴주기
{yyyy-MM-dd-hh-mm} : 분마다
{yyyy-MM-dd-hh} : 시마다
{yyyy-MM-dd} : 일마다
PatternLayout : log 패턴
Policies : 정책
SizeBasedTriggeringPolicy : 파일사이즈
TimeBasedTriggeringPolicy : 세부주기
.interval : rolling 주기 지정
.modulate : 다음 롤링 시간 지정, 1:30분에 어플리케이션 구동시,
true >>> 다음 rolling 시간은 3:00
false >>> 다음 rolling 시간은 2:30
DefaultRolloverStrategy :
Delete .maxDepth :현재파일 삭제, 2이상되면 디렉토리까지 삭제
IfAccumulatedFileCount .exceeds : rolling 파일 유지갯수, 한달동안 유지할거면 30으로
* FileName, FilePattern 파일경로 지정시 '/'여부에 따라 경로 차이
'/' 가 있으면, 절대경로 /logs/log4j2.log >>> C:\logs/
'/' 가 없으면, 상대경로 logs/log4j2.log >>> C:\workspace/base/logs/
*Loggers
- Root
- Logger
name="package"에 해당하는 로그 설정
Root에 일반적인 로그를 찍고, Logger들은 등록된 설정대로 출력
AppenderRef에 Logger가 등록된다고 이해하기
+ 참조 사이트
'⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆ > Spring' 카테고리의 다른 글
[SpringBoot] log4j의 additivity 옵션 (0) | 2023.10.19 |
---|---|
[SpringBoot] @Controller와 @RestController 차이점 (1) | 2023.10.19 |
[Springboot] Springboot 프로젝트 생성 및 셋팅하기 (1) | 2023.09.24 |
[Spring] @RequestParam을 이용한 값 받아오기 (0) | 2023.08.15 |
[Spring] Dispatcher-Servlet이란? 디스패처 서블릿의 개념과 동작 과정 (0) | 2023.08.15 |