Kotlin

Kotlin에서 SLF4J Logger 객체 생성하기

팅리엔 2024. 9. 20. 16:55

SLF4J

Simple Logging Facade for Java

로깅 인터페이스를 제공한다. (구현체 예: java.util.logging, logback, log4k)

클라이언트는 SLF4J 추상화에 의존하면 실제 구현체를 몰라도 된다. (DIP)

 

스프링부트 web은 default로 logback를 쓴다.

" logging.level" 프로퍼티들을 통해 로깅 수준을 정할 수 있고, "classpath:logback.xml" 파일을 통해 구성을 할 수 있다.

 

롬복을 쓴다면 `@Slf4j`를 사용해 Logger 객체를 생성할 수 있다. 

@Slf4j
public class someClass {
    public void someMethod() {
    	log.info("test");
    }
}

 

위 코드는 아래와 같이 해석된다.

public class SomeClass {
	private static final logger = LoggerFactory.getLogger(SomeClass.class);
}

 

코틀린으로 작성한다면? 아래 방법들이 있다.

 

 

 

 

팩터리 메서드 사용

import org.slf4j.LoggerFactory
 
inline fun <reified T> T.logger() = LoggerFactory.getLogger(T::class.java)!!
class SomeClass {
    val logger = logger()
 
    fun someMethod() {
        logger.info("test")
    }
}

 

 

추상클래스 사용

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

abstract class Logging {
    val logger : Logger = LoggerFactory.getLogger(this.javaClass)
}
class SomeClass {
	companion object : Logging()
	
	fun someMethod() {
		logger.info("test")
	}
}

 

 

인터페이스 사용

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

interface Logging {
    val logger : Logger get() = LoggerFactory.getLogger(this.javaClass)
}
class SomeClass {
	companion object : Logging
	
	fun someMethod() {
		logger.info("test")
	}
}

이 방식은 로깅을 찍을 때마다 get()이 호출되고 LoggerFactory.getLogger()가 호출되기 때문에 사용하지 않을 것 같다.

'Kotlin' 카테고리의 다른 글

Kotest로 테스트 코드 작성하기  (3) 2024.09.09
Kotlin으로 JPA Entity 정의하기  (0) 2024.09.04
Kotlin과 Java 함께 사용하기  (1) 2022.10.08
Kotlin 문법 - 표준 라이브러리편  (0) 2022.10.08
Kotlin 문법 - 중수편  (1) 2022.10.03