SLF4J 로깅 라이브러리 세팅하기

김남주·2024년 6월 14일

기존 자바 스윙 프로젝트에서는 로깅을 위해 System.out.println()을 사용했습니다.
System.out Replace 요청사진

하지만, 위 사진처럼 System.out.println()을 사용하게 되면 Replace this user of System.out.println() with a logger를 요청하는 경고가 뜨게 됩니다.

이는 System.out.println()을 사용하면 성능문제도 발생할 수 있고, 로깅 레벨을 변경할 수 없어서 문제가 발생할 수 있기 때문입니다.

따라서 이번 프로젝트 리팩토링의 첫번째 단계로 SLF4J 로깅 라이브러리를 추가하겠습니다.

SLF4J란?

SLF4J는 Simple Logging Facade for Java의 약자로, 자바 로깅 라이브러리를 추상화한 인터페이스입니다.

SLF4J에는 5가지 로깅 레벨이 있습니다.

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR

이 중에서 TRACE는 가장 상세한 로깅 레벨이고, ERROR는 가장 심각한 로깅 레벨입니다.

SLF4J는 인터페이스로써, 이를 구현해주기 위해 Logback, Log4j, JUL 구현체가 필요합니다.

이번 프로젝트에서는 Logback을 사용하겠습니다.

SLF4J 로깅 라이브러리 추가

1. build.gradle에 의존성 추가

build.gradle에 아래와 같이 의존성을 추가합니다.

dependencies {
    implementation 'ch.qos.logback:logback-classic:1.5.6'
    implementation 'ch.qos.logback:logback-core:1.5.6'
    implementation 'org.slf4j:slf4j-api:2.1.0-alpha1'
}

간단하게 SLF4J의 API 라이브러리를 추가하고, 해당 구현체인 Logback을 추가하였습니다

2. Logger 객체 생성 및 로깅

2-1. LoggerFactory를 통한 로깅

LoggerFactory를 통해 Logger를 생성하고, 로깅을 합니다.

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

public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        logger.info("Hello, World!");
    }
}

실행 결과

03:01:10.885 [main] INFO com.example.Main - Hello, World!

2-2. @Slf4j 어노테이션을 통한 로깅

Lombok 라이브러리를 사용하면 @Slf4j 어노테이션을 통해 Logger를 생성할 수 있습니다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Main {
    public static void main(String[] args) {
        log.info("Hello, World!");
    }
}

실행 결과

03:01:10.885 [main] INFO com.example.Main - Hello, World!

3. logback.xml 설정

logback.xml 파일을 통해 로깅 설정을 변경할 수 있습니다.

기본 세팅에서는 출력에 색상이 없어서 로그를 구분하기 어렵습니다.

logback.xml 파일을 resources 디렉토리에 추가하고, 아래와 같이 설정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d %highlight(%-5level) [%thread] %cyan(%logger{15}): %msg%n</Pattern>
        </encoder>
    </appender>

    <root level="trace">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

%highlight(%-5level)은 로깅 레벨을 색상으로 표시합니다.

%cyan(%logger{15})는 로거 이름을 cyan 색상으로 표시합니다.

logger.trace("This is trace log");
logger.debug("This is debug log");
logger.info("This is info log");
logger.warn("This is warn log");
logger.error("This is error log");

로그 색상 설정

로그 레벨에 따라 색상이 다르게 표시되는것을 확인할 수 있습니다.

마무리

이번 포스팅에서는 SLF4J 로깅 라이브러리를 추가하는 방법에 대해 알아보았습니다.

Logger를 활용하면 출력결과를 파일 또는 로깅 전용 서버로 전송하는 등 다양한 로깅 설정을 할 수 있습니다.
이외에도 System.out.println() 대신 Logger를 사용하면 성능 문제를 해결할 수 있고, 로깅 레벨을 변경할 수 있어서 유지보수에 용이합니다.

profile
T자형 개발자를 꿈꾸는 학생 개발자입니다

0개의 댓글