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