IT/PROGRAMMING

Kotlin의 모든 클래스에서 logger 객체를 편하게 얻을 수 있는 방법

하마연구소장 2021. 8. 18. 00:46
728x90
반응형

안녕하세요, 하마연구소 입니다.
Java에서 프로그래밍 할 때 편의를 위하여 Lombok을 거의 필수로 이용합니다.
보통 클래스변수의 getter()와 setter()를 자동으로 생성해주는 @Data 어노테이션을 붙이는 것을 많이 사용합니다.
그리고 @Log, @Slf4j 등 logger 객체를 쉽게 얻을 수 있는 기능을 제공하는데, 꽤 유용합니다.
코드가 많이 간단해집니다.

Kotlin으로 프로그래밍하면서 이와 같은 logger 객체를 쉽게 얻어주는 라이브러리를 찾아보았지만, 찾지 못했습니다.
최근 Kotlin 버전에서는 Lombok을 공식적으로 사용할 수 있게 되었습니다. (https://kotlinlang.org/docs/lombok.html)
하지만 아직(현재버전 1.5.21) @Log, @Log4j2, @Slf4j 등의 어노테이션은 지원을 하지 않습니다.

아래는 순수하게 Kotlin 코딩으로 간단하게 logger 객체를 얻을 수 있는 방법입니다.
Inline function으로 모든 객체에서 접근가능하도록 정의하였고, reified 키워드를 사용하여 런타임시에도 해당 객체에서 generic type에 접근할 수 있도록 하였습니다.

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

/**
 * 모든 Kotlin 클래스에서 SLF4J의 Logger 객체를 얻을 수 있다.
 */
inline fun <reified T> T.logger(): Logger {
    return LoggerFactory.getLogger(T::class.java)
}

Log4j2 객체가 필요하다면 function의 반환값과 구현부분을 살짝 변경하면 되겠죠?

혹시 이 방법말고 또다른 기똥찬 방법 알고 계시면 답글 부탁드립니다.

반응형