Kotlin中日志的使用方法詳解
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為內聯(lián),聲明為內聯(lián)才能使用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'
引入時,只需要在對應的類中創(chuàng)建一個屬性即可:
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方法,參數(shù)分別是:
- 函數(shù)
- 字符串
- org.slf4j.Logger
對外沒有提供類似getLogger(Class<?> clazz)這樣的用類作為參數(shù)的方法,因此,需要通過泛型獲取到具體類的名字并使用第二種方法構造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 參考
到此這篇關于Kotlin中日志使用方法的文章就介紹到這了,更多相關Kotlin日志使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android協(xié)程作用域與序列發(fā)生器限制介紹梳理
協(xié)程的作用是什么?協(xié)程是一種輕量級的線程,解決異步編程的復雜性,異步的代碼使用協(xié)程可以用順序進行表達,文中通過示例代碼介紹詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-08-08
Android開發(fā)使用HttpURLConnection進行網絡編程詳解【附源碼下載】
這篇文章主要介紹了Android開發(fā)使用HttpURLConnection進行網絡編程的方法,結合實例形式分析了Android基于HttpURLConnection實現(xiàn)顯示圖片與文本功能,涉及Android布局、文本解析、數(shù)據(jù)傳輸、權限控制等相關操作技巧,需要的朋友可以參考下2018-01-01
Android使用WebView實現(xiàn)離線閱讀功能
這篇文章主要介紹了Android使用WebView實現(xiàn)離線閱讀功能,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-04-04
android 使用OkHttp上傳多張圖片的實現(xiàn)代碼
這篇文章主要介紹了android 使用OkHttp上傳多張圖片的相關資料,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07

