[Java] Logback - 1

devhans·2023년 1월 15일
0

Logback

목록 보기
1/2
post-thumbnail

Introduction

Logging Framework인 SLF4j(Simple Logging Facade for Java)와 그 구현체로써 Logback이 존재합니다. 이번 포스팅은 Logback의 기본적인 예제 클래스를 실행시켜보며 logback이 사용하는 기본 구성파일을 읽는 순서를 확인합니다.

Logback

build.gradle에 의존성 추가

dependencies {
	compile "ch.qos.logback:logback-core:X.X.X"
	compile "ch.qos.logback:logback-classic:X.X.X"
	compile "org.slf4j:slf4j-log4j12:X.X.X"
}

SLF4J binding(.jar)로 logback을 사용할 땐 core와 claaic이 둘다 필요합니다. Logback의 클래스는 SLF4j의 인터페이스를 직접 구현한 것이며 SLF4j 프로젝트 외부에 SLF4j바인딩이 있습니다. 따라서 Logback과 함께 SLF4j를 사용하면 메모리 및 오버헤드가 발생하지 않습니다.
Logback의 ch.qos.logback.classic.Logger 클래스는 SLF4j의 org.slf4j.Logger 인터페이스를 직접 구현한 것입니다.

예제

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.");

  }
}

main()메서드의 첫번째 줄을 보면 logger라고 이름붙여진 변수에 Logger인스턴스를 할당합니다. 해당 인스턴스는 LoggerFactory클래스의 getLogger메서드를 통해 호출하여 조회합니다. 이 logger"chapters.introduction.​HelloWorld1"로 명명합니다. 메인 메서드는 두번째 줄인 debug메소드를 호출하고 "Hello World!"를 인자로 넘겨줍니다. 메인메서드가 "Hello World"라는 DEBUG 레벨의 로깅 문을 포함합니다.

로그의 레벨
TRACE<DEBUG<INFO<WARN<ERROR
만약 출력할 로깅문의 레벨을 DEBUG로 한다면,
DEBUG, INFO, WARN, ERROR 레벨의 로깅문은 출력
TRACE 레벨의 로깅문은 무시

만약 이 클래스를 자바 명령어를 통해 실행하려면 다음 명령어를 통해 실행하면 된다.

java chapters.introduction.​HelloWorld1

HelloWorld1 애플리케이션은 실행시키면 콘솔에 한줄 찍힙니다. logback의 기본 구성 정책에 따라 기본 구성파일을 찾을 수 없을 때, logback은 ConsoleAppender를 root logger에 추가합니다.

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

logback이 어떤 파일을 기본 구성 파일로 참조하는지를 확인하고 싶을때는 다음 클래스를 실행해보면 명확하게 콘솔에 찍어볼 수 있습니다.

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);
  }
}

실행결과

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은 [resources] 디렉토리에서
logback.groovy를 찾습니다. 해당 파일이 없으면
logback-test.xml을 찾습니다. 해당 파일이 없으면
logback.xml을 찾습니다. 해당 파일이 없으면
ConsoleAppender를 root logger에 추가합니다.

REF

slf4j 공식 문서: https://www.slf4j.org/manual.html
logback 공식 문서: https://logback.qos.ch/manual/introduction.html
Java 로그를 위한 SLF4j & Logback : https://dailylifecoding.tistory.com/entry/Java-%EB%A1%9C%EA%B7%B8Log%EC%9D%84-%EC%9C%84%ED%95%9C-SLF4J-Logback
Logger는 사드세요... 제발: SLF4J와 Logback : https://int-i.github.io/java/2022-10-02/slf4j-logback/

profile
책 읽고 운동하는 개발자

0개의 댓글