좋아, 이번에는 Spring Framework나 Spring Boot에서 자주 사용하는 로깅 레벨의 의미와
Logback 설정 방법(XML), JSON 형식 출력, 파일 저장 방식까지 실전에서 바로 쓸 수 있게
아주 자세히 정리해줄게!
| 레벨 | 용도 설명 |
|---|---|
TRACE | 가장 상세한 로그. 흐름 추적용 (디버깅 단계 전용) |
DEBUG | 개발 시 확인할 상세 정보 (변수 값, 조건 분기 등) |
INFO | 일반적인 서비스 운영 정보 (시작, 성공 메시지 등) |
WARN | 경고. 오류는 아니지만 주의가 필요한 상태 (deprecated, 비정상 응답 등) |
ERROR | 예외 발생이나 시스템 실패 상황 |
🔸 운영 서버: INFO 또는 WARN 이상
🔸 개발 환경: DEBUG 또는 TRACE 활성화 추천
logback.xml)Spring Boot는 기본적으로 Logback을 사용하며,
src/main/resources/logback.xml 파일을 만들면 설정을 직접 제어할 수 있어.
<configuration>
<!-- 콘솔 출력 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 로그 파일 출력 -->
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- root logger 설정 (최상위 로그레벨 정의) -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="fileAppender"/>
</root>
</configuration>
Logback은 logstash-logback-encoder 라이브러리를 사용하면 JSON 로그도 출력 가능해.
dependencies {
implementation 'net.logstash.logback:logstash-logback-encoder:7.4'
}
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="jsonConsole" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<fieldName>timestamp</fieldName>
</timestamp>
<loggerName />
<threadName />
<logLevel />
<message />
<stackTrace />
</providers>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="jsonConsole"/>
</root>
</configuration>
로그 파일이 커지면 자동으로 롤링해서 백업하거나, 날짜별로 파일을 분리할 수 있어.
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<!-- 파일 분할 정책: 날짜별 분할 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory> <!-- 7일 보관 -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="rollingFile"/>
</root>
# 전체 로그 레벨
logging.level.root=INFO
# 패키지별 로그 레벨 지정
logging.level.com.myapp.service=DEBUG
# 콘솔 출력 패턴
logging.pattern.console=%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
# 파일 저장 경로
logging.file.name=logs/application.log
logging.file.path=logs/
| 기능 | 방법 |
|---|---|
| 콘솔 출력 | ConsoleAppender 사용 |
| 파일 저장 | FileAppender 또는 RollingFileAppender |
| JSON 로그 출력 | logstash-logback-encoder 사용 |
| 로그 레벨 조정 | logging.level.xxx 또는 root level="..." |
| 로그 패턴 변경 | <pattern> 태그 수정 또는 logging.pattern.console |
필요하면:
어떤 방식이 더 궁금해? 😊