반응형

목차

1. 개발환경

2. LogBack이란?

3. LogBack의 주요 기능

4. Log 레벨 순서, 사용법

5. Logging 설정

6. Logback-spring.xml 설정

7. 구동화면

 

 

1. 개발환경

Java 17

Spring Boot 3.1.8

Gradle 8.5

 

 

 

 

2. LogBack이란?

LogLogback은 자바 기반의 오픈 소스 로깅 프레임워크이다. Logback은 로깅 기능과 SLF4J(Simple Logging Facade for Java)와의 통합을 제공하여 강력하고 유연한 로깅 솔루션을 제공해 준다. SLF4J는 다양한 로깅 구현체를 추상화하는 인터페이스를 제공하고, Logback은 이러한 인터페이스를 구현하여 실제로 로그를 처리한다.
Logback은 Log4j의 후속 버전으로 개발되었으며, Log4j보다 더욱 효율적이고 성능이 우수하다. Logback은 다음과 같은 주요 기능을 제공한다

 

 

 

3. LogBack의 주요 기능

1 모듈화된 아키텍처

Logback은 세 가지 주요 구성 요소인 로거(Logger), 앱랜더(Appender), 레이아웃(Layout)을 모듈화 하여 각각의 기능을 개별적으로 구성하고 확장할 수 있다.

 

2 다양한 로깅 레벨

TRACE, DEBUG, INFO, WARN, ERROR 등 다양한 로깅 레벨을 지원하여 로깅의 세부 수준을 조정할 수 있다.

 

3 로깅 이벤트 필터링

필터를 사용하여 특정 조건에 따라 로깅 이벤트를 필터링하고 처리할 수 있다.

 

4 로깅 이벤트 포맷팅

로깅 이벤트의 출력 형식을 사용자 정의할 수 있다. 예를 들어, 날짜 및 시간 형식, 로깅 메시지 포맷 등을 지정할 수 있다.

 

5 다양한 로그 출력 대상

콘솔(Console), 파일(File), 데이터베이스(Database) 등 다양한 로그 출력 대상을 지원한다.

 

6 환경별 설정

환경에 따라 다른 설정을 적용할 수 있도록 프로파일링을 지원한다.


4. Log 레벨 순서, 사용법

 

TRACE

가장 낮은 수준의 로그 레벨. TRACE 레벨은 애플리케이션의 디버깅에 사용되며, 가장 상세한 정보를 제공한다. 주로 애플리케이션 내부의 동작을 추적하기 위해 사용된다.

 

DEBUG

DEBUG 레벨은 TRACE보다 상위 수준의 디버깅 정보를 제공한다. 애플리케이션의 내부 상태나 특정 이벤트에 대한 추가 정보를 제공하는데 사용된다. 개발 및 디버깅 목적으로 사용된다.

 

INFO

INFO 레벨은 애플리케이션의 주요 이벤트 및 실행 상태를 기록하는데 사용된다. 일반적인 실행 정보와 애플리케이션의 중요한 상태 변화를 나타낸다.

 

WARN

WARN 레벨은 잠재적인 문제를 나타내는 경고 메시지를 기록하는데 사용된다. 애플리케이션의 실행에는 영향을 미치지 않지만 주의가 필요한 상황을 나타낸다.

 

ERROR

ERROR 레벨은 심각한 문제 또는 오류를 나타내는 메시지를 기록하는데 사용된다. 애플리케이션의 실행에 심각한 오류가 발생했음을 나타낸다.

 

FATAL

FATAL 레벨은 매우 심각한 오류를 나타내는 메시지를 기록하는데 사용된다. 일반적으로 애플리케이션의 실행을 중단시키는 치명적인 오류를 나타낸다.

 

5. Logging 설정

logging.level.root=info
logging.level.com.god.bo.test=info
logging.level.com.god.bo.test.controller=debug

예시이다. application.properties에 작성해준다.

1) 전체 level 설정 = info

2) 특정 컨트롤러 패키지 Log Level 설정 = (com.god.bo.test=debug)

 

 

 

 

6. Logback-spring.xml 설정

<?xml version="1.0" encoding="UTF-8"?>
<!-- 60초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
<configuration scan="true" scanPeriod="60 seconds">
    <!--springProfile 태그를 사용하면 logback 설정파일에서 복수개의 프로파일을 설정할 수 있다.-->
    <springProfile name="local">
        <property resource="logback-local.properties"/>
    </springProfile>
    <springProfile name="dev">
        <property resource="logback-dev.properties"/>
    </springProfile>
    <!--Environment 내의 프로퍼티들을 개별적으로 설정할 수도 있다.-->
    <springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>

    <!-- log file path -->
    <property name="LOG_PATH" value="${log.config.path}"/>
    <!-- log file name -->
    <property name="LOG_FILE_NAME" value="${log.config.filename}"/>
    <!-- err log file name -->
    <property name="ERR_LOG_FILE_NAME" value="err_log"/>
    <!-- pattern -->
    <property name="LOG_PATTERN" value="%-5level %d{yy-MM-dd HH:mm:ss}[%thread] [%logger{0}:%line] - %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">
                <!-- 파일당 최고 용량 kb, mb, gb -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
            <maxHistory>30</maxHistory>
            <!--<MinIndex>1</MinIndex>
            <MaxIndex>10</MaxIndex>-->
        </rollingPolicy>
    </appender>

    <!-- 에러의 경우 파일에 로그 처리 -->
    <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>60</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- root레벨 설정 -->
    <root level="${LOG_LEVEL}">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="Error"/>
    </root>

    <!-- 특정패키지 로깅레벨 설정 -->
    <logger name="org.apache.ibatis" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="Error"/>
    </logger>
</configuration>

src -> main -> resources 폴더에 생성해 주고 위 코드를 작성해 준다.

세부사항은 본인에게 맞춰 사용하면 된다.

 

 

 

 

7. 구동화면

이후 프로그램을 실행하면 다음과 같이 파일 두 개가 생긴다.

 

err_log.log 파일은 에러가 찍힌 로그들을 기록해 둔다.

log.config.filename_IS_UNDEFINED.log 파일은 모든 로그들을 기록해 둔다.

 

 

반응형

+ Recent posts