在 Kotlin 中实现来自 Lombok 的 @slf4j 注解

Implement @slf4j annotation from Lombok in Kotlin

有没有办法在 Kotlin 中用注解 class 实现类似于 Lombok 的注解 @slf4j 的东西?

现在我有一个扩展函数,可以为我实例化一个 Logger Factory,我必须在我的每个 classes 中创建这些变量,就像下面的例子一样:

@RestController
@RequestMapping("/api/v1/sample")
class SampleController() {
    private val log = logger()

    @GetMapping
    fun show(): String {
        log.info("SOME LOGGING MESSAGE")
        return "OK"
    }
}

inline fun <reified T> T.logger(): Logger {
    if (T::class.isCompanion) {
        return LoggerFactory.getLogger(T::class.java.enclosingClass)
    }
    return LoggerFactory.getLogger(T::class.java)
}

我想要实现的是:

@Logger
@RestController
@RequestMapping("/api/v1/sample")
class SampleController() {
    @GetMapping
    fun show(): String {
        log.info("SOME LOGGING MESSAGE")
        return "OK"
    }
}

昨天做了这个漂亮的东西

@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class Log {
    companion object {
        inline var <reified T> T.log: Logger
            get() = LoggerFactory.getLogger(T::class.java)
            set(value) {}
    }
}
编辑:

不要用上面这个乱七八糟的东西。使用

companion object {
    private val log: Logger = LoggerFactory.getLogger(this::class.java)
}