ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • logback 초간단 사용법
    모니터링 2024. 3. 11. 00:01

    개요

    Logback은 Java 커뮤니티에서 가장 널리 사용되는 로깅 프레임워크 중 하나입니다.

    log4j를 대체하고 있으며 빠른 적용이 가능합니다.

     

    Dependency

    dependencies {
        implementation("ch.qos.logback:logback-core:1.3.5")
        implementation("ch.qos.logback:logback-classic:1.3.5")
        testImplementation("org.slf4j:slf4j-api:2.0.4")
    }

    3가지 의존성을 추가해주면 됩니다.

     

    Logback Architecture

    <configuration>
        <!--System.out에 로그를 추가합니다. -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!--tests.log에 로그를 남깁니다.-->
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>tests.log</file>
            <append>true</append>
            <encoder>
                <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- FILE이라는 이름의 appender를 활용하는데 로그레벨이 INFO이상인 것만 남긴다 -->
        <logger name="com.baeldung.logback.tests" level="INFO">
            <appender-ref ref="FILE" />
        </logger>
    
        <!-- STDOUT이라는 이름의 appender를 활용하는데 로그레벨이 debug이상인 것만 남긴다 -->
        <root level="debug">
            <appender-ref ref="STDOUT" />
        </root>
    
    </configuration>

    resources/logback.xml 경로에 Logback 설정의 예시입니다.

    Logback이 설정 데이터를 찾기 위해서 클래스 경로에서 logback-test.xml, logback.groovy(지원 중단), logback.xml이라는 이름을 순서대로 찾습니다.

     

    Configuration 태그로 시작하며 appender, logger, root 등으로 아키텍처가 구성됩니다.

    Configuration 내부에는 최대 1개의 root 태그와 0개 이상의 appender와 logger를 갖습니다.

     

    root 태그는 STDOUT이라는 이름의 appender를 기본적으로 활용하도록 설정되어 있습니다.

    appender는 실제 로깅이 어떻게 수행될지 결정합니다.

    logback-core는 ConsoleAppender, FileAppender등의 유용한 기본 appender를 제공합니다.

     

    encoder의 경우 로그의 패턴을 정의할 수 있습니다.

    시간을 어떤 형식으로 출력할것인가, 스레드의 이름을 어떻게 할 것인가, 로그의 레벨을 몇 자로 한정해서 보여줄 것인가, 로거의 이름을 몇 자까지 보여줄 것인가 등을 정의할 수 있습니다.

     

    사용법

    @Component
    class LogbackTest: ApplicationRunner{
        override fun run(args: ApplicationArguments?) {
            logger.info("Example log from {}", LogbackTest::class.java.getSimpleName())
            loggerByStringName.info("test")
            fileLogger.info("it is a file logger")
        }
    }
    
    private val logger = LoggerFactory.getLogger(LogbackTest::class.java)
    private val loggerByStringName = LoggerFactory.getLogger("root")
    private val fileLogger = LoggerFactory.getLogger("com.baeldung.logback.tests")

     

    출력결과

    11:12:41.221 [main] INFO  c.e.study.controller.LogbackTest - Example log from LogbackTest
    11:12:41.222 [main] INFO  ROOT - test
    11:12:41.222 [main] INFO  com.baeldung.logback.tests - it is a file logger

     

    tests.log 파일에도 로그가 잘 기록되는 것을 확인할 수 있습니다.

    '모니터링' 카테고리의 다른 글

    Spring Actuator 안전하게 사용하기  (1) 2024.01.30
    Spring Boot + Prometheus + Grafana 로 모니터링 구축  (0) 2024.01.25
    Thanos란?  (0) 2024.01.20
    Grafana란?  (0) 2024.01.19
    ELK란 무엇인가?  (0) 2024.01.13

    댓글

Designed by Tistory.