반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[SpringBoot] 로그설정 - log4j2 본문

⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆/Spring

[SpringBoot] 로그설정 - log4j2

yeonee 여니 2023. 10. 19. 00:35
728x90
반응형
SMALL

안녕하세요.
#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{-&#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>

여기서 내가 필요한 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가 등록된다고 이해하기

 

 

+ 참조 사이트

728x90
반응형
LIST