728x90

로깅(Logging)
시스템의 상태나 동작 정보를 시간순으로 기록하는 것이다.
- 비기능 요구사항
- 원인 분석에 필요한 요소
Logback
Logback은 Java 기반의 로깅 프레임워크로, 로깅 시스템을 설정하고 관리하는데 사용된다.
- slf4j 기반 구현
- spring-boot-starter-web 라이브러리 내부에 내장되어 있다.
- log4j 이후에 출시 - log4j에 비해 성능이 월등하다.
- 5개의 로그레벨
- ERROR: 작동이 불가능한 경우를 의미한다
- WARN: 에러의 원인이 될 수 있는 경고 레벨을 의미한다.
- INFO: 상태 변경과 같은 정보 전달을 위해 사용한다.
- DEBUG: 디버깅을 위한 메시지를 표시하는데 사용한다.
- TRACE: DEBUG 보다 더 상세한 메시지를 표현하기 위한 레벨을 의미한다.
- 실제 운영 환경과 개발 환경에서 각각 다른 출력 레벨 설정이 가능하다.
- 로그 파일은 자체적으로 압축이 가능하며 보관 기간 등을 설정해서 관리할 수 있다. 또한 재가동이 필요없이 설정을 변경할 수 있다.
Logback 설정
스프링에서는 logback.xml 이라는 이름으로, 스프링 부트에서는 logback-spring.xml 파일을 참조한다.
일반적으로 리소스 폴더 안에 생성한다.

Appenders 영역(출력 대상 설정)
Appender 영역은 로그의 형태를 설정하고 어떤 방법으로 출력할지를 설정하는 곳이다.

- 대표적인 구현체
- ConsoleAppender: 콘솔에 로그 출력
- FileAppender: 파일에 로그 저장
- RollingFileAppender: 여러 개의 파일을 순회하면서 로그를 저장
- SMTPAppender: 메일로 로그를 전송
- DBAppender: 데이터베이스에 로그 저장
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
- name: Appender의 이름을 지정한다.
- class: 사용할 Appender 클래스를 지정합니다. 여기서는 콘솔에 출력하는 ConsoleAppender를 사용하고 있다.
- encoder: 로그 메시지의 출력 형식을 지정한다.
- 대표적인 패턴


Loggers 영역
logger로 패키지 단위로 로깅이 될 범위와 레벨을 지정할 수 있다.
<logger name="com.example" level="DEBUG" additivity="false"/>
- name: 로거의 이름을 지정합니다. 패키지 레벨부터 정확한 클래스 레벨까지 설정할 수 있다.
- level: 로그 레벨을 지정합니다. DEBUG, INFO, WARN, ERROR 등이 있다.
- additivity: 지정한 패키지의 하위 패키지 포함 여부를 결정한다. 기본값을 true로 포함한다는 의미이다.
Root 영역
설정한 Appender을 활용하려면 Root 영역에서 Appender를 참조해 로깅 레벨을 설정해야한다.
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
- level: 루트 로거의 전체 로깅 레벨을 지정합니다. 루트 로거는 모든 패키지에 영향을 미칩니다.
- appender-ref: 루트 로거에 적용할 Appender를 참조합니다.
예제
<configuration>
<!-- Appenders -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/application.log</file>
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Loggers -->
<logger name="com.example" level="DEBUG"/>
<!-- Root Logger -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
위의 logback.xml 예제에서 중요한 부분은 다음과 같다
Appenders
- CONSOLE: 콘솔에 로그를 출력하는 Appender다.
- FILE: 파일에 로그를 기록하는 Appender입니다. 파일 이름은 "logs/application.log"로 지정되어 있다.
Loggers
- com.example 패키지에 대한 로거를 설정하고 레벨을 DEBUG로 지정하였다.
Root Logger
- Root 로거에는 레벨이 INFO로 설정되어 있으며, CONSOLE과 FILE Appender에 로그를 출력하도록 참조하고 있다.
사용하기
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExampleClass {
private static final Logger logger = LoggerFactory.getLogger(ExampleClass.class);
public void doSomething() {
logger.info("This is an info message.");
logger.error("This is an error message.");
}
}
출력할 메시지를 Appender에게 전달한 Logback 객체를 각 클래스에 정의해서 사용한다.
LoggerFactory를 통해 객체를 생성하며 클래스 이름을 함께 지정해서 클래스 정보를 Logger에게 전해준다.
변수와 함께 로깅을 하고 싶다면 아래처럼 작성 할 수 있다.
logger.info("This is a log message with variables: {} {}", variable1, variable2);728x90
'spring > spring' 카테고리의 다른 글
| [Spring][Error] creating bean with name 'jpaAuditingHandler (0) | 2024.02.11 |
|---|---|
| [Spring][Error][Swagger]documentationPluginsBootstrapper (0) | 2024.02.11 |
| [스프링 부트 핵심 가이드] HTTP 요청 메서드 받기 (0) | 2024.02.01 |
| [스프링 부트 핵심 가이드] pom.xml (0) | 2024.02.01 |
| [Spring] @Transactional (0) | 2024.02.01 |