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