SpringBoot/배포 및 운영
로그 관리(Logback, Log4j2)
DEVLIB
2025. 4. 16. 11:27
728x90
1. 로그 프레임워크 개요
프레임워크 |
설명 |
Logback | Spring Boot의 기본 로깅 시스템 (SLF4J 연동) |
Log4j2 | 고성능 로그 시스템, 필요 시 직접 설정 필요 |
SLF4J | 표준 로깅 추상화 (Logback, Log4j2 둘 다 사용 가능) |
2. 기본 로그 구조 (Logback)
application.properties
logging.level.root=INFO
logging.level.com.example=DEBUG
logging.file.name=app.log
logging.pattern.console=%d{HH:mm:ss} %-5level %logger{36} - %msg%n
위 설정만으로도 app.log 파일 생성, 콘솔 출력 포맷 변경 가능
3. Logback 커스텀 설정 (logback-spring.xml)
src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="logs" />
<!-- 콘솔 로그 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 파일 로그 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 보관 일수 -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
파일 로그는 logs/ 폴더에 날짜별 분할
하루 단위 롤링, 30일 보관 설정
4. Log4j2로 전환
설정 변경
build.gradle에서 Logback 제거 + Log4j2 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}
반드시 spring-boot-starter-logging 제거해야 충돌 방지
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
log4j2-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="File" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
로그 레벨 종류
레벨 | 설명 |
TRACE | 가장 상세한 로그 (디버깅용) |
DEBUG | 개발 단계 디버깅 정보 |
INFO | 일반적인 처리 흐름 |
WARN | 경고, 예외 발생 가능성 있음 |
ERROR | 오류 발생 시 출력 |
마무리 요약
항목 | 설명 |
기본 로그 | Spring Boot는 Logback 기본 내장 |
파일 로그 설정 | logback-spring.xml 또는 application.properties |
롤링 로그 | 날짜별 분할 + 삭제 주기 설정 |
Log4j2 전환 | 의존성 교체 + XML 설정 필요 |
실무 팁 | DEBUG는 개발용, 운영 서버는 INFO 이상 추천 |
기타
기능 | 도구/설명 |
로그 뷰어 | Logtail, ELK Stack, CloudWatch |
MDC 사용 | 사용자 ID, 세션 ID 등 컨텍스트 로그 추가 |
JSON 로그 | logstash-logback-encoder 라이브러리로 JSON 포맷 가능 |
LIST