본문 바로가기

백앤드/Java

[JAVA] Logback과 Resource Bundle 로 로그 관리하기

반응형

서론 없이 바로 본론으로 들어가겠습니다.

 

1. Maven (pom.xml) Dependency 설정

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.9</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.9</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-ext</artifactId>
    <version>1.7.32</version>
</dependency>
<dependency>
    <groupId>ch.qos.cal10n</groupId>
    <artifactId>cal10n-api</artifactId>
    <version>0.8.1</version>
</dependency>

 

2. Resource Bundle 생성

Resource Bundle

여기서 파일명에 대한 네이밍규칙은 ${BaseName}_${language}.properties 이렇게 지켜주셔야합니다.

 

ko_KR 은 한글 버전 로그 // en_US 는 영어 버전 로그

각각의 로그는 아래 사진처럼 추가하였습니다.

이렇게 해서 다국어 로그를 지원하도록 해보겠습니다.

언어는 개발자에 의해서 얼마든지 더 추가될 수 있습니다.

 

3. LogCode Enum Class 생성

import ch.qos.cal10n.BaseName;
import ch.qos.cal10n.Locale;
import ch.qos.cal10n.LocaleData;

@BaseName("systemLog")
@LocaleData(
    defaultCharset = "UTF-8",
    value = {@Locale("ko_KR"), @Locale("en_US")}
)
public enum LogCode {
    LOGCODE_0000,
    LOGCODE_0001
}

여기에서 @BaseName은 Resource Bundle 에서 생성할 때 설명한 것처럼, Bundle 파일명을 기준으로 합니다.

 

4. 로그 출력 하기

import module.LogCode;
import java.util.Locale;
import ch.qos.cal10n.IMessageConveyor;
import ch.qos.cal10n.MessageConveyor;
import org.slf4j.cal10n.LocLogger;
import org.slf4j.cal10n.LocLoggerFactory;

public class main {
    static final LocLogger Log = getLogger(main.class);

    public static void main(String[] args) {
        Log.info(LogCode.LOGCODE_0000);
    }
    
    private static LocLogger getLogger(Class clazz) {
        IMessageConveyor messageConveyor = new MessageConveyor(Locale.KOREA);
        LocLoggerFactory locLoggerFactory = new LocLoggerFactory(messageConveyor);
        return locLoggerFactory.getLocLogger(clazz);
    }
}

여기서 한가지 팁을 말하자면 getLogger 의 파라미터에는 main.class와 같이 클래스명을 직접 명시하지 않아도

getClass()를 통해서 자기 자신의 클래스를 불러올 수 있습니다.

 

이 포스팅의 예제에서는 main 클래스에서 static으로 설명을 하게되다보니 getClass()를 사용할 수 없어서

이런 예제로 설명드렸습니다.

 

여기까지 포스팅 끝 -

반응형