1 引言
想必学过Java的人都知道一个@Slf4j使用得多么的舒服:
@Slf4j
public class TestController{
@GetMapping("/test")
public String test(){
log.debug("debug");
return "test";
}
}
但是很不幸在Kotlin中并没有这种注解,因此,本文给出了一种类似@Slf4j注解在Kotlin中的使用方法,以及介绍一个100%使用Kotlin编写的日志库。
2 动手写@Slf4j
很简单,先上代码:
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class Slf4j{
companion object{
val <reified T> T.log: Logger
inline get() = LoggerFactory.getLogger(T::class.java)
}
}
逐行解释如下:
- @Target:与Java中的@Target类似,注解的目标,这里是类
- @Retention:与Java中的@Retention类似,运行时保留
- annotation class:声明一个注解
- companion object:伴生对象
- val <reified T> T.log:Logger:声明一个Logger类型的泛型对象
- inline get() = LoggerFactory.getLogger(T::class.java):声明getter为内联,声明为内联才能使用T,这样才能传递给后面的getLogger,T::class.java相当于Java中的T.class,也就是getLogger(T::class.java)相当于getLogger(SomeClass.class)
使用很简单:
@RestController
@Slf4j
class TestController {
@GetMapping("/test")
fun test():String{
log.warn("cc")
return "test"
}
}
直接类上加一个注解,就可以使用log.info/log.warn之类的方法了。
3 kotlin-logging
上面介绍了注解的使用方法,如果不想使用注解的话,可以使用别人的库,比如kotlin-logging。
kotlin-logging是一个100%使用Kotlin编写的轻度封装了slf4j的开源日志库,已经收获1.4k的star:
依赖如下:
<dependency>
<groupId>io.github.microutils</groupId>
<artifactId>kotlin-logging-jvm</artifactId>
<version>2.0.6</version>
</dependency>
Gradle:
implementation 'io.github.microutils:kotlin-logging-jvm:2.0.6'
引入时,只需要在对应的类中创建一个属性即可:
private val logger = KotlinLogging.logger {}
使用时,直接调用其中的info/debug/error等即可:
import mu.KotlinLogging
private val logger = KotlinLogging.logger {}
class FooWithLogging {
val message = "world"
fun bar() {
logger.debug { "hello $message" }
}
}
4 两者结合使用
当然,也可以将注解与kotlin-logging结合一下使用,首先,笔者简单地看了一下KotlinLogging的接口:
提供了三个对外的logger方法,参数分别是:
对外没有提供类似getLogger(Class<?> clazz)这样的用类作为参数的方法,因此,需要通过泛型获取到具体类的名字并使用第二种方法构造mu.KLogger:
import mu.KotlinLogging
import org.slf4j.Logger
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class Slf4j{
companion object{
val <reified T> T.log: Logger
inline get() = KotlinLogging.logger{T::class.java.name}
}
}
使用方法同上,直接加一个@Slf4j即可使用。
5 完整Demo参考
6 参考
1、kotlin-logging
2、Kotlin官网-内联函数
相关推荐:
ChatGPT-深度学习与自然语言处理的革命性突破,金华ai视觉锁螺丝机
seo类文章是什么,seo技术文章 ,ai3.5-ai聊天
SEO项目:如何通过精确优化提升企业网站排名与转化率,武汉做网站优化的公司
ChatGPT免费订阅的使用限制:其潜力与挑战,ai辅助线无法对齐画板
SEO走动:提升网站流量的关键一步,SEO数据监控宝宝推荐
SEO而且:打造高效网站流量增长的秘密武器,滨江网站推广营销
ChatGPT服务器坏了?了解背后的技术与应对策略,AI模块代表
ChatGPT页面空白无法登录?如何解决这一困扰?,温州ai字幕生成
ChatGPT常见问题汇总:解答你关于AI的一切疑惑,松鼠ai智能教适应教育
ChatGPT翻译打不开?解决方法!,ai爱股票
SEO添加:提升网站流量与排名的必备策略,seo团队成员中国人
AI写作的崛起-“只能AI写作”背后的巨大潜力,舞狮摄影ai
SEO定价策略:如何根据企业需求定制最佳价格方案,教育培训抖音营销推广
优化文字,让表达更精准:提升写作效率的关键,个人网站建设外包
AI免费写文:创作新时代的高效助手
打破创作边界,无限可能无限制生成文章的AI
AI助手推进:智能化时代的企业革命,ai改变图片颜色
seo需要什么器械,seo需要什么器械才能做 ,长续航ai纯电汽车
ChatGPT坏了用什么?替代方案,满足你的智能对话需求,星际一的ai
seo诊断什么意思,seo诊断a5 ,约瑟夫ai
Chato1免费么?揭开这款AI聊天机器人的神秘面纱,交个朋友ai写作
AI一键生成文章免费版:颠覆写作新体验
AI人工智能:改变未来的科技革命
ChatGPTWindows版本下载:让AI助力您的工作和生活,ai yamama
ChatGPT故障你从未听过的真相,究竟是什么让它偶尔“失灵”?,ai 图片 矢量
目前AI软件有哪些?智能新时代的必备工具
AI批量文章工具,让写作变得高效与轻松,cs机器人ai
SEO符合:提升网站排名的秘诀,助力企业赢在搜索引擎优化的赛道,优化没续费 网站没了
SEO要不,来看看如何通过SEO优化提高网站流量和曝光度,seo 获客技巧
文章AI思维导图自动生成助力创作的智慧之源
“曝光量扩大,助力品牌腾飞的秘密武器”,盐山网站优化免费咨询
优化网站的秘诀:提高网站速度与用户体验,助力业务腾飞,旅游网站建设步骤
Bing无法使用怎么办?解决方法及替代方案推荐!,ai文字设计教程
GoogleGTP-智能时代的革命性突破,人工智能的新纪元,ai可以降论文ai率吗
ChatGPT无法访问原因分析及解决方案,斑马ai报道
如何查文章AI率?全面解析AI文章检测工具及技巧
seo经理做什么的,seo经理招聘 ,盲人ai眼镜
SEO就业前景如何?打造数字时代的职业新风口,常州武进区水产网站建设
什么是神马排名?让你的网站脱颖而出,轻松占据搜索引擎的C位!,乳山网站优化关键词排名
什么是seo发外链,seo外链类型有哪些 ,小小苏ai
OpenAI无法验证支付方式?解决方案与常见问题解析,你好月光ai
AI人物生成:重新定义虚拟形象创作的未来
如何快速写出高质量的AI文章:从入门到精通
seo要学什么技术,seo要学什么技术好 ,ai.fale
SEO调整,助力网站流量爆发式增长!,江都seo优化排名
ChatGPT点不了?背后的真相与解决方法,ai.520523
SEO才能:提升网站排名,突破网络营销的核心竞争力,南宁本地seo营销公司
未来智能:AI智能人工软件引领数字化变革
ChatGPT:智能对话开创新时代,ai做渐变直线
OpenAI您的信用卡被拒绝了?请尝试用借记卡支付,轻松解决支付问题!,ai cdr缩略图补丁