Link
Today
Total
11-27 21:55
Archives
관리 메뉴

초보개발자 긍.응.성

Logback - 1. 소개 본문

Spring/Logback

Logback - 1. 소개

긍.응.성 2020. 9. 25. 02:42
반응형

logback

logback 홈페이지의 매뉴얼을 읽으며 내용들을 정리한 글입니다.

Logback 이란?

Logback은 Java 커뮤니티에서 가장 널리 사용되는 로깅 프레임워크 중 하나입니다. 이전에 로깅에 사용되던 Log4j의 설립자인 Ceki Gülcü 의해 디자인되었기에 Log4j를 계승하며, 빠르게 구현할 수 있는 것이 특징입니다. 또한, 많은 구성 옵션을 제공하기 때문에 로그파일을 보다 유연하게 아카이빙 할 수 있습니다.

Logback 시작

Logback사용을 위해 몇 가지 준비해야 할 것이 있습니다. Logback은 기본 인터페이스로써 SLF4J(Simple Logging Facade for Java)를 사용합니다 (이름만으로 보아 Facade 패턴을 적용한 것을 알 수 있습니다). maven dependency에 logback-coreslf4j-api를 추가해줍시다.

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
</dependency>
 
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
    <scope>test</scope>
</dependency>

아래와 같이 org.slf4j.Logger와 org.slf4j.LoggerFactory를 import 하고 코드를 작성합시다.

package chapters.introduction;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld1 {

  public static void main(String[] args) {

    Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
    logger.debug("Hello world.");

  }
}

코드를 분석해 봅시다.

LoggerFactory.getLogger() 메서드를 통해 Logger 인스턴스를 가져오는 것을 알 수 있습니다. 이 Logger의 이름은 getLogger() 메서드에 파라미터로 전달한 "chapters.introduction.HelloWorld1"이 됩니다. Logger는 debug() 메서드를 통해 DEBUG 레벨의 로깅으로 "Hello world."를 출력합니다.

위의 예에서 로그백 클래스를 참조하지 않고 오직 slf4j 클래스만을 통해 로깅하는 것을 알 수 있습니다. Logback은 slf4j api를 이용하여 Logback클래스 사용방법을 알지 못하더라도 쉽게 로깅 프레임워크를 이용할 수 있도록 해줍니다.

이제 main을 실행해봅시다. 그 결과, 아래 처럼 로그가 출력되는 것을 확인할 수 있습니다.

20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.

Logback의 기본 출력을 지정하지 않았다면 ConsoleAppender를 root logger에 추가합니다.

logger는 로그 메시지를 위한 하나의 context로, appender는 logger가 출력하는 위치로 간단히 이해하시고 넘어가시길 바랍니다.

 

이제 Logger의 상태 데이터에 대하여 출력하는 법은 알아보도록 하겠습니다.

package chapters.introduction;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;

public class HelloWorld2 {

  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
    logger.debug("Hello world.");

    // print internal state
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    StatusPrinter.print(lc);
  }
}

Logback은 내장 상태 시스템(built-in status system)을 이용하여 내부 시스템에 대한 정보를 출력할 수 있습니다. Logback에서 일어나는 주요 이벤트들은 StatusManager를 통해 접근할 수 있습니다. 위의 코드는 StatusPrinter를 이용하여 내부 상태를 출력하도록 합니다.

12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world.
12:49:22,076 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default configuration.

실행 시 볼수있는 로그입니다. Logback은 순서대로 설정 정보를 담고 있는 파일일 logback.groovy, logback-test.xml, logback.xml에 대해 찾습니다. 하지만 우리는 지정해둔 설정 파일이 없기에 해당 configuration files를 찾는데 실패했음을 볼 수 있습니다. 이렇게 되어서 Logback은 자신의 기본 설정 정책을 통해 ConsoleAppender를 이용하게 됩니다.

Logback이 사용할 설정 파일을 찾지못하였을 때 이는 중요한 에러이며, 내부에서 Logback이 이러한 정보를 자동으로 출력한다는것을 알 수 있습니다.

반응형
Comments