Napier 是 Kotlin Multiplatform 的記錄器庫。
它支援Android、Darwin(iOS、macOS、watchOS、tvOS)、JVM、JavaScript。
公共模組中寫入的日誌顯示在每個平台的日誌檢視器上。
格式: [Class name]$[Method name]: [Your log]
使用android.util.Log
(Logcat)
格式: [Date time][Symbol][Log level][Class name].[Method name] - [Your log]
如果從掛起函數調用,則在末尾添加[async]
標籤。
使用print
使用console.log
使用java.util.logging.Logger
class Sample {
fun hello (): String {
Napier .v( " Hello napier " )
Napier .d( " optional tag " , tag = " your tag " )
return " Hello Napier "
}
suspend fun suspendHello (): String {
Napier .i( " Hello " )
delay( 3000L )
Napier .w( " Napier! " )
return " Suspend Hello Napier "
}
fun handleError () {
try {
throw Exception ( " throw error " )
} catch (e : Exception ) {
Napier .e( " Napier Error " , e)
}
}
}
您可以從 MavenCentral 或 jCenter 儲存庫下載此庫。
您可以從1.4.1
開始下載。
包名稱是io.github.aakira
repositories {
mavenCentral()
}
您可以下載此版本直至1.4.1
。
套件名稱是com.github.aakira
repositories {
jCenter()
}
在 build.gradle 中設定版本名稱
def napierVersion = "[latest version]"
將依賴項新增至您的 commonMain 依賴項中
sourceSets {
commonMain {
dependencies {
// ...
implementation " io.github.aakira:napier: $n apierVersion "
}
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation( " io.github.aakira:napier: $napierVersion " )
}
}
}
// verbose log
Napier .v( " Hello napier " )
Napier .v { " Hello napier " }
// you can set a tag for each log
Napier .d( " optional tag " , tag = " your tag " )
Napier .d(tag = " your tag " ) { " optional tag " }
try {
.. .
} catch (e : Exception ) {
// you can set the throwable
Napier .e( " Napier Error " , e)
Napier .e(e) { " Napier Error " }
}
// you can also use top-level function
log { " top-level " }
log(tag = " your tag " ) { " top-level " }
您必須在模組中初始化 Napier。
Napier .base( DebugAntilog ())
fun debugBuild () {
Napier .base( DebugAntilog ())
}
|參數|型別|描述| |-|-| |coroutinesSuffix|Boolean|如果從掛起函數調用,則在末尾添加[async]
標籤|
NapierProxyKt . debugBuild ( )
Napier .takeLogarithm()
平台 | 樣本 |
---|---|
詳細 | 納皮爾.v() |
偵錯 | 納皮爾.d() |
資訊 | 納皮爾.i() |
警告 | 納皮爾.w() |
錯誤 | 納皮爾.e() |
斷言 | 納皮爾.wtf() |
您可以使用 Kotlin.coroutines 作為 native-mt 在 iOS 的後台執行緒上使用此函式庫。
internal val mainScope = SharedScope ( Dispatchers . Main )
internal val backgroundScope = SharedScope ( Dispatchers . Default )
internal class SharedScope ( private val context : CoroutineContext ) : CoroutineScope {
private val job = Job ()
private val exceptionHandler = CoroutineExceptionHandler { _, throwable ->
println ( " [Coroutine Exception] $throwable " )
}
override val coroutineContext : CoroutineContext
get() = context + job + exceptionHandler
}
backgroundScope.launch {
suspendFunction()
}
您可以注入自訂Antilog
。
因此,您應該在偵錯版本或發布版本中更改反對數。
Crashlytics AntiLog 範例
範例專案使用 Firebase Crashlytics。
您必須將身份驗證檔案設定為android/google-services.json
和ios/Napier/GoogleService-Info.plist
。
檢查 firebase 文件。 [安卓、iOS]
將其寫入您的應用程式類別中。
if ( BuildConfig . DEBUG ) {
// Debug build
// disable firebase crashlytics
FirebaseCrashlytics .getInstance().setCrashlyticsCollectionEnabled( false )
// init napier
Napier .base( DebugAntilog ())
} else {
// Others(Release build)
// enable firebase crashlytics
FirebaseCrashlytics .getInstance().setCrashlyticsCollectionEnabled( true )
// init napier
Napier .base( CrashlyticsAntilog ( this ))
}
將其寫入您的 AppDelegate 中。
#if DEBUG
// Debug build
// init napier
NapierProxyKt . debugBuild ( )
#else
// Others(Release build)
// init firebase crashlytics
FirebaseApp . configure ( )
// init napier
NapierProxyKt . releaseBuild ( antilog : CrashlyticsAntilog (
crashlyticsAddLog : { priority , tag , message in
Crashlytics . crashlytics ( ) . log ( " ( String ( describing : tag ) ) : ( String ( describing : message ) ) " )
} ,
crashlyticsSendLog : { throwable in
Crashlytics . crashlytics ( ) . record ( error : throwable )
} ) )
#endif
Copyright (C) 2019 A.Akira
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
這個圖書館的靈感來自於木材。
如果它支援 kotlin 多平台項目,我建議使用它。
謝謝你的建議。
@horita-yuya,@terachanple