1. 로깅을 하는 이유
앱 개발 시 운영 중 발생하는 문제점을 모니터링 하거나 추적하는데 용이하고, 데이터를 분석해 통계를 낼 수 있음
2. 로깅을 위한 도구
SLF4J는 로깅에 대한 퍼사드(인터페이스) 역할을 하며 실제 로깅을 위한 구현체로는 Log4j, Logback이 있음
1) SLF4J(Simple Logging Facade for Java) 인터페이스
- 로깅에 관한 간단한 퍼사드(인터페이스)를 제공
- 실제로 로깅을 수행하는 것이 아닌 추상화 제공
- 코드에서 SLF4J 인터페이스를 사용하고 실행환경에서 로깅 라이브러리를 선택할 수 있도록 함
2) Log4j 구현체
- 가장 오래된 프레임워크이며 Apache 의 Java 기반 Logging Framework
- Log4j 1 버전은 자체 인터페이스 제공, Log4j 2 버전 부터 SLF4j를 인터페이스를 통해 로깅
- 스프링 부트에서 dependency 추가하여 사용함
// Maven 프로젝트 xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
// Gradle 프로젝트 build.gradle
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
3) Logback 구현체
- Log4j 이후에 출시된 Java 기반 Logging Framework 중 하나로 가장 널리 사용됨
- log4j에 비해 향상된 필터링 정책, 기능, 로그 레벨 변경 등에 대해 서버를 재시작할 필요 없이 자동 리로딩을 지원한다는 장점이 있음
- SLF4j 의 구현체이며 Spring Boot 환경이라면 spring-boot-starter-web > spring-boot-starter-logging에 logback 구현체가 포함되어 있어 별도의 dependency 추가 없이 사용할 수 있음
>> 나는 Logback을 이용하여 로깅 하려고함
3. 로깅 설정/관리 방법
- application.yml 또는 application.properties 로 관리 또는 logback-spring.xml 로 관리하는 방법 두 가지가 있음
- 두 가지 방법 모두 로깅 환경을 구성하고, 로깅 레벨, 출력 형식, 파일 경로 등 모든 설정을 통합적으로 관리하도록 도와줌
- application.yml 또는 application.properties 파일과 logback-spring.xml 파일은 함께 사용 가능하지만 같은 설정을 두 곳에서 동시에 정의하면 충돌이 발생할 수 있으므로 주의가 필요함
만약 logback-spring.xml 파일이 없다면 properties 파일을 먼저 읽고, 둘 다 존재 할 경우 properties 파일이 먼저 적용됨
1) application.yml 또는 application.properties 로 관리하기
- 스프링 부트의 일반적인 설정 파일로 모든 설정을 통합적으로 관리하므로 일반적인 로깅 설정에 사용할 수 있음
2) logback-spring.xml 로 관리하기
- Logback의 설정을 디테일하게 제어할 때 사용
- 로그 패턴, 로그 롤링 정책, Appender 구성 등 Logback에 특화된 설정 담당
- 위치는 resource폴더 - logback-spring.xml
4. logback-spring.xml 작성하여 로깅 설정/관리 하기
1) 적용한 설정
<?xml version="1.0" encoding="UTF-8"?>
<!-- 60초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
<configuration debug="true" scan="true" scanPeriod="60 seconds">
<!-- 로그 패턴에 색상 적용 %clr(pattern){color} -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<!--springProfile 태그를 사용하면 logback 설정 파일에서 복수개의 프로파일(properties)을 설정할 수 있다.-->
<!-- ex: spring.profiles.active=dev -->
<!-- local | dev | real 로 관리 할 수 있음 -->
<springProfile name="dev">
<property resource="application-dev.properties"/>
</springProfile>
<!--Environment 내의 프로퍼티들을 개별적으로 설정할 수도 있다.-->
<springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>
<!-- 로그 파일 경로 및 이름 설정 -->
<!-- <property name="LOG_PATH" value="logs"/>-->
<property name="LOG_FILE_NAME" value="console"/>
<property name="ERR_LOG_FILE_NAME" value="err"/>
<!-- 로그 패턴 설정 -->
<property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] %clr(%-5level) %clr(${PID:-}){magenta} %clr(---){faint} %clr([%15.15thread]){faint} %clr(%-40.40logger{36}){cyan} %clr(:){faint} %msg%n"/>
<!-- Console Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- File Appender -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 파일명 설정 -->
<file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그 파일 압축 -->
<fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량: 설정 크기 초과 시 새로운 파일 생성 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그 파일 최대 보관일(단위: 일), 설정 일 초과 시 파일 자동 제거-->
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- ERROR 레벨 로그를 별도 파일에 로그 처리 -->
<appender name="ERROR" 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>
<file>${LOG_PATH}/${ERR_LOG_FILE_NAME}.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_PATH}/${ERR_LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- root 레벨 설정 -->
<!-- 설정한 level 로그를 appender-ref(참조할 appender)로 출력/파일 저장 -->
<root level="${LOG_LEVEL}">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="ERROR"/>
</root>
<!-- logger 레벨 설정 -->
<!-- 특정 패키지에서 로거가 발생될 때 설정해둔 파일 기록 설정-->
<logger name="com.example.queueproject.csBot" level="trace">
<appender-ref ref="FILE"/>
<appender-ref ref="ERROR"/>
</logger>
</configuration>
2) 설정 상세 설명
Logback 프레임워크 로깅 구성 정의
<?xml version="1.0" encoding="UTF-8"?>
<!-- 60초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
<configuration debug="true" scan="true" scanPeriod="60 seconds">
</configuration>
- <?xml version="1.0" encoding="UTF-8"?>: XML 파일의 버전과 인코딩 지정
- <configuration debug="true" scan="true" scanPeriod="60 seconds">: Logback의 기본 설정 시작. 상세 속성은 아래와 같음
- debug="true": Logback의 디버그 모드를 활성화합니다. 이 모드에서는 Logback의 내부 동작에 관한 디버그 정보를 더 상세하게 얻을 수 있습니다.
- scan="true": 설정 파일의 변경을 주기적으로 감지하여 변경이 있을 경우 새로고침합니다. 이렇게 함으로써 설정을 변경하고 애플리케이션을 다시 시작하지 않고도 로깅 구성을 업데이트할 수 있습니다.
- scanPeriod="60 seconds": 설정 파일 변경을 감지하는 주기를 지정합니다. 여기서는 60초로 설정되어 있으므로 60초마다 설정 파일 변경을 확인합니다.
- </configuration>: Logback의 설정 블록 종료
Logback 로그 출력에 색상 적용
<!-- 로그 패턴에 색상 적용 %clr(pattern){color} -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
- %clr(pattern){color}: 이 부분에서 %clr은 Logback에서 제공하는 특별한 변환 패턴. pattern은 로그 메시지의 패턴이고, {color}는 해당 패턴에 적용할 색상을 나타냄.
- conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter": 이 부분은 %clr 패턴을 어떤 색상으로 변환할지를 정의. ColorConverter 클래스는 org.springframework.boot.logging.logback 패키지에 포함되어 있으며, 이를 사용하여 로그 메시지에 색상을 적용.
Spring 프로파일 환경 설정
<!--springProfile 태그를 사용하면 logback 설정 파일에서 복수개의 프로파일(properties)을 설정할 수 있다.-->
<springProfile name="dev">
<property resource="application-dev.properties"/>
</springProfile>
- <springProfile name="dev">: 이 태그는 Spring의 프로파일 중 하나인 "dev" 프로파일이 활성화된 경우에 적용되는 설정 정의
- <property resource="application-dev.properties"/>: "dev" 프로파일이 활성화되면 해당 프로파일에 대응하는 설정 파일인 application-dev.properties를 참조. 이 파일은 프로파일별로 서로 다른 환경에 필요한 로깅 설정, 데이터베이스 설정, 서버 구성 등을 정의할 수 있음.
예를 들어, application-dev.properties 파일에서는 개발 환경에서 사용할 데이터베이스 URL, 로깅 레벨, 디버그 모드 등을 설정할 수 있음. 이렇게 함으로써 각각의 프로파일에 대응하는 설정 파일을 사용하여 애플리케이션의 동작을 조정할 수 있음.
Spring 환경 프로퍼티를 사용하여 로깅 설정하기
<!--Environment 내의 프로퍼티들을 개별적으로 설정할 수도 있다.-->
<springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>
- <springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>: 이 부분은 Spring의 환경 프로퍼티 중 logging.level.root 값을 가져와서 Logback의 로그 레벨 설정. LOG_LEVEL이라는 이름으로 이 값을 Logback의 로거 컨텍스트에 등록하고 이를 통해 로깅 레벨을 동적으로 조정할 수 있음
- <springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>: 이 부분은 Spring의 환경 프로퍼티 중 logging.file.path 값을 가져와서 Logback에서 사용하는 로그 파일의 경로를 설정. LOG_PATH라는 이름으로 이 값을 Logback의 로거 컨텍스트에 등록함.
# application.properties 파일에 아래와 같이 작성하면 됨
# console log level (trace < debug < info < warn < error)
logging.level.root=info
# 로깅 파일 저장될 경로
logging.file.path=log
로그 레벨 정하기
1. 로그단계
Trace < Debug < Info < Warn < Error
2. 로그 단계 정하기
Debug 와 Trace 레벨은 많은 양의 로그가 쌓이므로 자칫 운영 단계에서 해당 레벨의 로깅을 할 경우 용량 감당이 안 될 수 있음. 그렇기 때문에 중요하지 않은 정보는 Debug 이하로 설정하고 로깅을 하지 않는 편이 좋음
-> debug, trace 레벨은 개발 단계에서만 사용하고 배포 단계에서는 사용 하지 않기
로그 파일과 경로 이름 설정
<!-- 로그 파일 경로 및 이름 설정 -->
<property name="LOG_FILE_NAME" value="console"/>
<property name="ERR_LOG_FILE_NAME" value="err"/>
- <property name="LOG_FILE_NAME" value="console"/>: 이 부분은 로그 파일의 이름 지정. 여기서는 console이라는 파일 이름을 사용하고 있고 이를 통해 나중에 실제로 로그 파일을 생성할 때 이 이름이 사용됨
- <property name="ERR_LOG_FILE_NAME" value="err"/>: 이 부분은 에러 로그 파일의 이름 지정. 마찬가지로 err이라는 파일 이름을 사용하였음.
로그 패턴 설정
<!-- 로그 패턴 설정 -->
<property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] %clr(%-5level) %clr(${PID:-}){magenta} %clr(---){faint} %clr([%15.15thread]){faint} %clr(%-40.40logger{36}){cyan} %clr(:){faint} %msg%n"/>
- %d{yyyy-MM-dd HH:mm:ss}:%-3relative: 이 부분은 로그 이벤트가 발생한 시간 출력. 날짜와 시간은 지정된 형식인 "yyyy-MM-dd HH:mm:ss"에 따라 출력되며, %-3relative는 로그 이벤트가 상대적인 시간으로 얼마나 오래 전에 발생했는지 나타냄
- %clr(%-5level): 이 부분은 로그 레벨을 출력하고 해당 레벨에 색상 적용. %clr은 색상을 적용하는 특수한 변환 패턴.
- %clr(${PID:-}){magenta}: 이 부분은 프로세스 ID (PID)를 출력하고 해당 값에 마젠타 색상을 적용합니다. ${PID:-}는 PID 값이 없을 경우 빈 문자열로 처리.
- %clr(---){faint}: 이 부분은 구분선을 출력하고 해당 값을 희미한 색상으로 표시.
- %clr([%15.15thread]){faint}: 이 부분은 스레드 이름을 출력하고 해당 값을 희미한 색상으로 표시. 최대 15자까지 표시하도록 지정.
- %clr(%-40.40logger{36}){cyan}: 이 부분은 로거 이름을 출력하고 해당 값을 청록색으로 표시. 최대 40자까지 표시하되, 실제 로거 이름은 최대 36자까지만 표시됨.
- %clr(:){faint}: 이 부분은 구분자를 출력하고 해당 값을 희미한 색상으로 표시.
- %msg%n: 이 부분은 로그 메시지를 출력하고 개행 문자 추가.
콘솔에 출력할 로그 Console Appender 설정
<!-- Console Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
- <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">: 이 부분은 콘솔에 로그를 출력하는 Appender를 정의. Appender는 로그 이벤트를 어디에 출력할지를 결정하는 역할. 여기서는 CONSOLE이라는 이름을 가진 콘솔 Appender를 생성하고, ch.qos.logback.core.ConsoleAppender 클래스를 사용.
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">: 이 부분은 로그 이벤트를 출력할 때 어떤 형식으로 출력할지를 정의하는 Encoder 설정. 여기서는 PatternLayoutEncoder 클래스를 사용하여 로그 패턴 지정.
- <pattern>${LOG_PATTERN}</pattern>: 이 부분은 위에서 정의한 로그 패턴인 ${LOG_PATTERN}을 적용하여 로그 이벤트 출력. 따라서 이 콘솔 Appender는 정의한 패턴대로 로그를 출력하게 됨.
파일로 출력할 로그 File Appender 설정
<!-- File Appender -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 파일명 설정 -->
<file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그 파일 압축 -->
<fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량: 설정 크기 초과 시 새로운 파일 생성 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그 파일 최대 보관일(단위: 일), 설정 일 초과 시 파일 자동 제거-->
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
- <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">: 파일로 로그를 출력하는 Appender 정의. Appender의 이름은 FILE이며, ch.qos.logback.core.rolling.RollingFileAppender 클래스를 사용하여 파일에 로그를 출력하도록 설정.
- <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>: 로그를 출력할 파일의 경로와 이름을 설정. ${LOG_PATH}와 ${LOG_FILE_NAME}는 설정 파일에서 정의한 프로퍼티 값들로부터 가져온 변수들을 사용하여 파일 경로를 동적으로 설정.
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">: 파일에 출력될 로그의 형식을 지정하는 Encoder를 설정. 앞서 설명한 것처럼 PatternLayoutEncoder 클래스를 사용하여 로그 패턴 지정.
- <pattern>${LOG_PATTERN}</pattern>: 위에서 정의한 로그 패턴인 ${LOG_PATTERN}을 사용하여 로그 이벤트를 출력.
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">: Rolling 정책을 설정합니다. TimeBasedRollingPolicy는 시간 기반으로 로그 파일을 롤링하는 정책.
- <fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>: 롤링된 로그 파일의 이름 패턴을 지정. 여기서 %d{yyyy-MM-dd}는 현재 날짜를 나타내며, %i는 롤링된 로그 파일의 인덱스를 나타냄
- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">: 파일 크기 및 시간 기반으로 롤링할 수 있도록 정책 설정.
- <maxFileSize>10MB</maxFileSize>: 각 로그 파일의 최대 크기를 10MB로 설정하며, 이 크기를 초과하는 경우 새로운 파일 생성.
- <maxHistory>10</maxHistory>: 일자별 로그 파일의 최대 보관일을 설정합니다. 총 10일간의 로그를 보관하며, 이 기간을 초과하는 로그 파일은 자동으로 삭제됨.
1. 롤링 정책이란?
- 로그 파일을 관리하기 위한 정책으로 로그 파일의 크기, 시간, 이력 등을 기반으로 파일을 관리하는 방식
- 로그 파일이 너무 커지거나 새로운 파일로 롤링하거나 일정기간 후에 삭제하거나 압축하는 등의 동작 수행
2. Logback의 롤링 정책
1) ch.qos.logback.core.rolling.TimeBasedRollingPolicy
일정 시간 간격 또는 크기에 따라 새로운 로그파일을 생성하고 기존 로그 파일을 롤링(이동 또는 압축)하는 정책을 나타냄
2) ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP
파일명을 날짜와 인덱스로 지정하는 정책 설정
내가 작성한 파일을 기준으로 설명하면 console.log라는 파일명으로 생성되다가 크기가 10MB가 초과하면 console.2023-12-18_0.log 이런식으로 파일이 생성됨
ERROR 레벨 로그 별도 파일로 출력하기 위한 설정
<!-- ERROR 레벨 로그를 별도 파일에 로그 처리 -->
<appender name="ERROR" 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>
<file>${LOG_PATH}/${ERR_LOG_FILE_NAME}.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_PATH}/${ERR_LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
- <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">: ERROR 레벨의 로그를 처리하는 Appender 정의. Appender의 이름은 ERROR이며, ch.qos.logback.core.rolling.RollingFileAppender 클래스를 사용하여 롤링 파일 Appender를 설정.
- <filter class="ch.qos.logback.classic.filter.LevelFilter">: 로그 이벤트를 필터링하는데 사용되는 필터 정의. 여기서는 LevelFilter를 사용하여 ERROR 레벨의 로그 이벤트만을 처리하도록 설정.
- <level>error</level>: 필터의 레벨을 ERROR로 설정합니다. 이 필터는 ERROR 레벨 이벤트만을 허용합니다.
- <onMatch>ACCEPT</onMatch>: 필터의 동작을 설정합니다. onMatch는 필터가 일치할 경우 어떻게 동작할지를 지정하는데, ACCEPT는 로그 이벤트를 수락하도록 설정합니다.
- <onMismatch>DENY</onMismatch>: 필터의 동작을 설정합니다. onMismatch는 필터가 일치하지 않을 경우 어떻게 동작할지를 지정하는데, DENY는 로그 이벤트를 거부하도록 설정합니다.
다른 설정은 파일 출력 설정과 동일함.
모든 로그 이벤트에 적용되는 최상위 레벨인 root 레벨의 로깅 설정
<!-- root 레벨 설정 -->
<!-- 설정한 level 로그를 appender-ref(참조할 appender)로 출력/파일 저장 -->
<root level="${LOG_LEVEL}">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="ERROR"/>
</root>
- <root level="${LOG_LEVEL}">: root 레벨의 로깅 설정 시작. ${LOG_LEVEL}은 설정 파일에서 정의한 프로퍼티로부터 가져온 로깅 레벨. 이 설정은 root 레벨의 최소 로깅 레벨을 나타냄. 예를 들어, "INFO"로 설정하면 INFO 레벨 이상의 로그만 기록됨.
- <appender-ref ref="CONSOLE"/>: root 레벨의 로그 이벤트를 Console Appender인 "CONSOLE"에 참조(ref)하여 출력하도록 설정. 따라서 root 레벨의 로그는 콘솔에 출력됨.
- <appender-ref ref="FILE"/>: root 레벨의 로그 이벤트를 File Appender인 "FILE"에 참조(ref)하여 파일에 출력하도록 설정. 따라서 root 레벨의 로그는 파일에도 출력됨.
- <appender-ref ref="ERROR"/>: root 레벨의 ERROR 레벨 로그 이벤트를 별도의 파일 Appender인 "ERROR"에 참조(ref)하여 출력하도록 설정. 앞서 설정한 ERROR Appender는 ERROR 레벨의 로그만을 처리하도록 구성됨.
Logback 공식문서
https://logback.qos.ch/manual/
'Spring > Springboot' 카테고리의 다른 글
[Springboot] 액츄에이터 - 헬스정보 health 엔드포인트 (0) | 2023.12.30 |
---|---|
[springboot] 액츄에이터(actuator) (0) | 2023.12.29 |
[Spring] WebClient와 RestTemplate (0) | 2023.12.06 |
스프링 프로젝트 생성하기 (0) | 2023.01.27 |
📝 스프링(Spring) 예외(Exception)처리 2 (0) | 2022.11.19 |