Logging library for Kotlin Multiplatform
Napier is a logger library for Kotlin Multiplatform.
It supports for the android, ios, jvm, js.
Logs written in common module are displayed on logger viewer of each platform.
format:
[Class name]$[Method name]: [Your log]
uses the
android.util.Log(Logcat)
format:
[Date time][Symbol][Log level][Class name].[Method name] - [Your log]
uses the
uses the
console.log
uses the
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) } }
}
You can download this library from jCenter or maven repository.
repositories { jCenter() }
repositories { maven { url "https://dl.bintray.com/aakira/maven" } }
Set the version name in your build.gradle
def napierVersion = "[latest version]"
Add the dependency to your commonMain dependencies
commonMain { dependencies { // ... implementation "com.github.aakira:napier:$napierVersion" } }
// verbose log Napier.v("Hello napier")// you can set a tag for each log Napier.d("optional tag", tag = "your tag")
try { ... } catch(e: Exception) { // you can set the throwable Napier.e("Napier Error", e) }
You must initialize the Napier in your module.
Napier.base(DebugAntilog())
fun debugBuild() { Napier.base(DebugAntilog()) }
NapierProxyKt.debugBuild()
Napier.takeLogarithm()
| Platform | Sample | |:--------------|:------------| | VERBOSE | Napier.v() | | DEBUG | Napier.d() | | INFO | Napier.i() | | WARNING | Napier.w() | | ERROR | Napier.e() | | ASSERT | Napier.wtf()|
You can inject custom
Antilog.
Crashlytics AntiLog samples
Sample projects use the Firebase Crashlytics.
You must set authentication files to
android/google-services.jsonand
ios/Napier/GoogleService-Info.plist.
Check the firebase document. [Android, iOS]
Write this in your application class.
if (BuildConfig.DEBUG) { // Debug build// init napier Napier.base(DebugAntilog())
} else { // Others(Release build)
// init firebase crashlytics Fabric.with(this, Crashlytics()) // init napier Napier.base(CrashlyticsAntilog(this))
}
Write this in your AppDelegate.
#if DEBUG // Debug build// init napier NapierProxyKt.debugBuild()
#else // Others(Release build)
// init firebase crashlytics FirebaseApp.configure() Fabric.with([Crashlytics.self])
// init napier NapierProxyKt.releaseBuild(antilog: CrashlyticsAntilog( crashlyticsAddLog: { priority, tag, message in let args = [tag, message].compactMap { $0 } CLSLogv("%@", getVaList(args)) return .init() }, crashlyticsSendLog: { throwable in Crashlytics.sharedInstance().recordError(throwable) return .init() })) #endif
Copyright (C) 2019 A.AkiraLicensed 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
http://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.
This library is inspired by Timber.
I recommend use it if it supports kotlin multiplatform project.😜
Thanks for advice.
@horita-yuya,
@terachanple