【原创】解决Kotlin无法使用@Slf4j注解的问题

前言

主要还是辟谣之前的网上的用法,当然也会给出最终的使用方法。这可是Kotlin,关Slf4j何事!?

辟谣内容:创建注解来解决这个问题

例如:

Kotlin 复制代码
@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) {}
    }
}

为什么没用

然后我看了一下StackOverflow,结果这个方法的作者说:

也有人问为什么不能这么做,作者的回答是T.log:Logger方法会在全局加载使用,注解完全是多余的!!

我试了一下,果真如此哦......

其中@KLog就是代码里的@Log,然后我把@KLog去掉

毛线啊,啥事都没发生,果然如作者所说,这个注解完全是多余的......我也是蚌埠住了,难怪作者会说不要用这个方法了。

解决方法

这可是Kotlin,有扩展方法要什么注解?为什么非要局限于注解了?我不要不就完事了。

创建一个LogExtend.kt类

加入以下代码:

Kotlin 复制代码
package 你的package地址

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

fun <T : Any> T.logger(): Logger {
    return LoggerFactory.getLogger(this.javaClass)
}

fun <T : Any> T.logError(e: Throwable) {
    logger().error("", e)
}

fun <T : Any> T.logError(msg: String) {
    logger().error(msg)
}

fun <T : Any> T.logInfo(msg:String) {
    logger().info(msg)
}

fun <T : Any> T.logDebug(msg:String) {
    logger().debug(msg)
}

使用方法:

直接调用logInfo即可,由于Kotlin支持字符串模板,log.info主要一个string入参的方法即可,其他方法实则都已经包括进去了。这些可太好了,连log.info的点都省去了(手动狗头)。

缺点当然也有,这就是所有的类都可以用logInfo这个方法了,但是这个问题确实也没法解决啊。

实现效果:

相关推荐
Ai-_Man10 小时前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节
Android系统攻城狮11 小时前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮11 小时前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
1-1=011 小时前
.NET Core 文件系统
.net·.netcore·1024程序员节
FPGA小迷弟11 小时前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
SZYSK12 小时前
OpenHarmony 上读卡、推理和双屏刷新抢 CPU:核验机与消费机的调度差
物联网·算法·harmonyos·1024程序员节
FLJwu12 小时前
《运动相机硬件防护选型实战》专栏|第二篇(PPTC 自恢复保险丝)
android·经验分享·数码相机·1024程序员节·运动相机
xsd2024111812 小时前
OCEC 24×40 开闭眼脑电分类:从 α 波节律到实时 BCI 落地方案
人工智能·1024程序员节
Ivanqhz12 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
紧跟先前的步伐21 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节