728x90
1.application-local.yml
spring:
config:
activate:
on-profile: local
logging:
level:
root: info
local에서 쓰일 설정들을 application-local.yml에 선언합니다.
2.application-prod.yml
spring:
config:
activate:
on-profile: prod
logging:
level:
root: info
prod에서 쓰일 설정들을 application-local.yml에 선언합니다.
3.application.yml
spring:
profiles:
active: prod
어떠한 개발환경이 쓰일지는 application.yml의 spring.prfile.active에서 선언하거나 intellij에서 구성편집에 들어가 활성화된 프로파일을 원하는 개발환경에 맞게 설정합니다. intellij의 개발환경이 먼저 적용되므로 주의하여 사용합니다.
4.logback-spring.xml
(1) include 선언
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
</configuration>
console log는 springboot에서 기본 제공하는 포맷을 사용하기 위해 defaults.xml과 console-appender.xml을 include해줍니다.
(2) property 설정
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<!-- 로그 파일이 저장될 경로 -->
<property name="LOG_INFO_PATH" value="./log/info"/>
<property name="LOG_WARN_PATH" value="./log/warn"/>
<property name="LOG_ERROR_PATH" value="./log/error"/>
<property name="LOG_FILE_PATTERN"
value="%-5level %d{yy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] [id = %X{id}] - %msg%n"/>
<property name="LOG_LEVEL" value="${logging.level.root}"/>
</configuration>
property를 설정해 ${property_name}으로 xml 파일에서 쓸 수 있습니다.
(3)info,warn,error 파일 분리
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<!-- File에 INFO 로그 출력 세팅 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 레벨 필터 설정 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch> <!-- 해당 레벨만 기록한다. -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_FILE_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_INFO_PATH}/INFO_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>30</maxHistory>
<!--<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>-->
</rollingPolicy>
</appender>
</configuration>
레벨 필터를 설정하여 INFO,WARN,ERROR log만 볼 수 있도록 설정합니다.
Rolling 정책은 일자별로 log 파일을 볼 수 있고 일정량의 사이즈가 넘어가면 새로운 log파일을 만들어 관리하기 쉽게 만들어 줍니다. 또, 로그파일의 최대 보관주기도 설정 할 수 잇습니다.
(4) 개발환경에 따른 분리
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<root level="${LOG_LEVEL}">
<!-- 위에 설정한 콘솔 설정 추가 -->
<springProfile name="local">
<appender-ref ref="CONSOLE"/>
</springProfile>
<!-- 위에 설정한 파일 설정 추가 -->
<springProfile name="prod">
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</springProfile>
</root>
</configuration>
xml의 springProfile을 이용하여 local,prod를 분리 할 수 있고 appender-ref를 이용하여 위에서 설정한 것들을 추가시킬 수 있습니다.
(5) logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!-- 로그 파일이 저장될 경로 -->
<property name="LOG_INFO_PATH" value="./log/info"/>
<property name="LOG_WARN_PATH" value="./log/warn"/>
<property name="LOG_ERROR_PATH" value="./log/error"/>
<property name="LOG_FILE_PATTERN"
value="%-5level %d{yy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] [id = %X{id}] - %msg%n"/>
<property name="LOG_LEVEL" value="${logging.level.root}"/>
<!-- 로그 레벨 -->
<!--
1) ERROR : 오류 메시지 표시
2) WARN : 경고성 메시지 표시
3) INFO : 정보성 메시지 표시
4) DEBUG : 디버깅하기 위한 메시지 표시
5) TRACE : Debug보다 훨씬 상세한 메시지 표시
INFO 일 경우 INFO 보다 위에 있는 DEBUG와 TRACE는 표시하지 않는다.
-->
<springProfile name="prod">
<!-- File에 INFO 로그 출력 세팅 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 레벨 필터 설정 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch> <!-- 해당 레벨만 기록한다. -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_FILE_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_INFO_PATH}/INFO_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>30</maxHistory>
<!--<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>-->
</rollingPolicy>
</appender>
<!-- File에 WARN 로그 출력 세팅 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 레벨 필터 설정 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch> <!-- 해당 레벨만 기록한다. -->
<onMismatch>DENY
</onMismatch> <!-- 다른 수준의 레벨은 기록하지 않는다.(상위 레벨도 기록 안함), 상위 수준의 레벨에 대한 기록을 원하면 ACCEPT 로 하면 기록된다. -->
</filter>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_FILE_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_WARN_PATH}/warn_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>30</maxHistory>
<!--<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>-->
</rollingPolicy>
</appender>
<!-- File에 ERROR 로그 출력 세팅 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 레벨 필터 설정 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch> <!-- 해당 레벨만 기록한다. -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_FILE_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_ERROR_PATH}/error.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>30</maxHistory>
<!--<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>-->
</rollingPolicy>
</appender>
</springProfile>
<root level="${LOG_LEVEL}">
<!-- 위에 설정한 콘솔 설정 추가 -->
<springProfile name="local">
<appender-ref ref="CONSOLE"/>
</springProfile>
<!-- 위에 설정한 파일 설정 추가 -->
<springProfile name="prod">
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</springProfile>
</root>
</configuration>
5. 결과
(1) local
(2) prod
728x90
'Spring' 카테고리의 다른 글
MDC 및 로그레벨에 따른 로그파일 분리 (1) | 2023.11.14 |
---|---|
Pinpoint Cloud (0) | 2023.11.13 |
Spring Restdocs (0) | 2023.11.10 |
그라파나 설치 및 사용법 (0) | 2023.11.07 |
프로메테우스 설치 및 사용법 (1) | 2023.11.07 |