最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin中日志的使用方法詳解

 更新時(shí)間:2021年03月18日 10:08:31   作者:氷泠  
這篇文章主要給大家介紹了關(guān)于Kotlin中日志的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1 引言

想必學(xué)過Java的人都知道一個(gè)@Slf4j使用得多么的舒服:

@Slf4j
public class TestController{
 @GetMapping("/test")
 public String test(){
  log.debug("debug");  
  return "test";
 }
}

但是很不幸在Kotlin中并沒有這種注解,因此,本文給出了一種類似@Slf4j注解在Kotlin中的使用方法,以及介紹一個(gè)100%使用Kotlin編寫的日志庫。

2 動(dòng)手寫@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類似,注解的目標(biāo),這里是類
  • @Retention:與Java中的@Retention類似,運(yùn)行時(shí)保留
  • annotation class:聲明一個(gè)注解
  • companion object:伴生對(duì)象
  • val <reified T> T.log:Logger:聲明一個(gè)Logger類型的泛型對(duì)象
  • inline get() = LoggerFactory.getLogger(T::class.java):聲明getter為內(nèi)聯(lián),聲明為內(nèi)聯(lián)才能使用T,這樣才能傳遞給后面的getLogger,T::class.java相當(dāng)于Java中的T.class,也就是getLogger(T::class.java)相當(dāng)于getLogger(SomeClass.class)

使用很簡單:

@RestController
@Slf4j
class TestController {
  @GetMapping("/test")
  fun test():String{
    log.warn("cc")
    return "test"
  }
}

直接類上加一個(gè)注解,就可以使用log.info/log.warn之類的方法了。

3 kotlin-logging

上面介紹了注解的使用方法,如果不想使用注解的話,可以使用別人的庫,比如kotlin-logging。

kotlin-logging是一個(gè)100%使用Kotlin編寫的輕度封裝了slf4j的開源日志庫,已經(jīng)收獲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'

引入時(shí),只需要在對(duì)應(yīng)的類中創(chuàng)建一個(gè)屬性即可:

private val logger = KotlinLogging.logger {}

使用時(shí),直接調(diào)用其中的info/debug/error等即可:

import mu.KotlinLogging
private val logger = KotlinLogging.logger {} 
class FooWithLogging {
  val message = "world"
  fun bar() {
    logger.debug { "hello $message" }
  }
}

4 兩者結(jié)合使用

當(dāng)然,也可以將注解與kotlin-logging結(jié)合一下使用,首先,筆者簡單地看了一下KotlinLogging的接口:

提供了三個(gè)對(duì)外的logger方法,參數(shù)分別是:

  • 函數(shù)
  • 字符串
  • org.slf4j.Logger

對(duì)外沒有提供類似getLogger(Class<?> clazz)這樣的用類作為參數(shù)的方法,因此,需要通過泛型獲取到具體類的名字并使用第二種方法構(gòu)造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}
  }
}

使用方法同上,直接加一個(gè)@Slf4j即可使用。

5 完整Demo參考

6 參考

1、kotlin-logging

2、Kotlin官網(wǎng)-內(nèi)聯(lián)函數(shù)

到此這篇關(guān)于Kotlin中日志使用方法的文章就介紹到這了,更多相關(guān)Kotlin日志使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用CMake構(gòu)建OpenCV項(xiàng)目過程解析

    使用CMake構(gòu)建OpenCV項(xiàng)目過程解析

    這篇文章主要介紹了使用CMake構(gòu)建OpenCV項(xiàng)目過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Android協(xié)程作用域與序列發(fā)生器限制介紹梳理

    Android協(xié)程作用域與序列發(fā)生器限制介紹梳理

    協(xié)程的作用是什么?協(xié)程是一種輕量級(jí)的線程,解決異步編程的復(fù)雜性,異步的代碼使用協(xié)程可以用順序進(jìn)行表達(dá),文中通過示例代碼介紹詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-08-08
  • Android仿微信5實(shí)現(xiàn)滑動(dòng)導(dǎo)航條

    Android仿微信5實(shí)現(xiàn)滑動(dòng)導(dǎo)航條

    這篇文章主要為大家詳細(xì)介紹了Android仿微信5實(shí)現(xiàn)滑動(dòng)導(dǎo)航條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android 架構(gòu)之?dāng)?shù)據(jù)庫框架搭建

    Android 架構(gòu)之?dāng)?shù)據(jù)庫框架搭建

    這篇文章主要給大家介紹的是Android 架構(gòu)之?dāng)?shù)據(jù)庫框架搭建,在本篇中,將會(huì)讓你一點(diǎn)一滴從無到有創(chuàng)建一個(gè)不再為數(shù)據(jù)庫而煩惱的框架。需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Android獲取手機(jī)號(hào)碼和運(yùn)營商信息的方法

    Android獲取手機(jī)號(hào)碼和運(yùn)營商信息的方法

    這篇文章主要介紹了Android獲取手機(jī)號(hào)碼和運(yùn)營商信息的方法,以實(shí)例形式完整講述了獲取手機(jī)號(hào)碼和運(yùn)營商信息的技巧,代碼中包含完整的注釋說明,需要的朋友可以參考下
    2015-01-01
  • Android開發(fā)使用HttpURLConnection進(jìn)行網(wǎng)絡(luò)編程詳解【附源碼下載】

    Android開發(fā)使用HttpURLConnection進(jìn)行網(wǎng)絡(luò)編程詳解【附源碼下載】

    這篇文章主要介紹了Android開發(fā)使用HttpURLConnection進(jìn)行網(wǎng)絡(luò)編程的方法,結(jié)合實(shí)例形式分析了Android基于HttpURLConnection實(shí)現(xiàn)顯示圖片與文本功能,涉及Android布局、文本解析、數(shù)據(jù)傳輸、權(quán)限控制等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Android使用WebView實(shí)現(xiàn)離線閱讀功能

    Android使用WebView實(shí)現(xiàn)離線閱讀功能

    這篇文章主要介紹了Android使用WebView實(shí)現(xiàn)離線閱讀功能,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-04-04
  • android 使用OkHttp上傳多張圖片的實(shí)現(xiàn)代碼

    android 使用OkHttp上傳多張圖片的實(shí)現(xiàn)代碼

    這篇文章主要介紹了android 使用OkHttp上傳多張圖片的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Android酷炫動(dòng)畫效果之3D星體旋轉(zhuǎn)效果

    Android酷炫動(dòng)畫效果之3D星體旋轉(zhuǎn)效果

    本文要實(shí)現(xiàn)的3D星體旋轉(zhuǎn)效果是從CoverFlow演繹而來,不過CoverFlow只是對(duì)圖像進(jìn)行轉(zhuǎn)動(dòng),我這里要實(shí)現(xiàn)的效果是要對(duì)所有的View進(jìn)行類似旋轉(zhuǎn)木馬的轉(zhuǎn)動(dòng)
    2018-05-05
  • 深入理解Android中View繪制的三大流程

    深入理解Android中View繪制的三大流程

    這篇文章主要給大家介紹了關(guān)于Android中View繪制的三大流程,View的工作流程主要是指measure、layout、draw這三大流程,即測(cè)量、布局和繪制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-07-07

最新評(píng)論

宜城市| 大城县| 睢宁县| 重庆市| 乌苏市| 肥城市| 龙陵县| 横山县| 鄂伦春自治旗| 辉南县| 宁安市| 伊金霍洛旗| 兴山县| 桂东县| 绥芬河市| 额济纳旗| 剑川县| 山阳县| 十堰市| 湟源县| 张家口市| 昌吉市| 阳曲县| 连州市| 贡觉县| 鄯善县| 余庆县| 尚志市| 平顺县| 辽阳市| 台南县| 花莲市| 乌鲁木齐市| 茂名市| 荆门市| 茶陵县| 陆良县| 甘孜县| 枝江市| 改则县| 洱源县|