当前位置: 首页 > article >正文

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

前言

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

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

例如:

@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类

加入以下代码:

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这个方法了,但是这个问题确实也没法解决啊。

实现效果:


http://www.kler.cn/a/107515.html

相关文章:

  • 基于Spring Boot与Redis的令牌主动失效机制实现
  • Java算法OJ(7)随机快速排序
  • 在JPA和EJB中用乐观锁解决并发问题
  • 深度学习——优化算法、激活函数、归一化、正则化
  • 山泽光纤HDMI线:铜线的隐藏力量
  • vue2.7.14 + vant + vue cli脚手架转vite启动运行问题记录
  • 设计模式(13)适配器模式
  • GZ035 5G组网与运维赛题第4套
  • 【Android】一个contentResolver引起的内存泄漏问题分析
  • 通信基础(一):数据传输基础
  • Java工具库——Commons IO的50个常用方法
  • 软考系统架构之案例篇(软件工程相关概念)
  • .net 7 上传文件踩坑
  • 【Python机器学习】零基础掌握DecisionBoundaryDisplay检验、检查
  • SpringMVC Day 05 : Spring 中的 Model
  • react实现步进器
  • flutter升级+生成drift文件
  • hadoop使用简介
  • C# 递归算法使用简介_常用整理
  • Vue引入异步组件
  • STM32F4X SDIO(二) SDIO协议
  • 使用Hystrix实现请求合并,降低服务器并发压力
  • Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同
  • 科聪协作(复合)移动机器人整体解决方案
  • 【JVM】类加载器
  • 指针进阶(1)