在 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)
}
见
有没有办法在 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)
}
见