Need help with Napier?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

AAkira
272 Stars 19 Forks Apache License 2.0 204 Commits 6 Opened issues

Description

Logging library for Kotlin Multiplatform

Services available

!
?

Need anything else?

Contributors list

# 39,495
Kotlin
kotlin-...
Android
kotlin-...
109 commits
# 51,807
Objecti...
C
carthag...
watchos
4 commits
# 50,270
Kotlin
Android
ktor
kotlin-...
3 commits
# 34,737
Kotlin
Shell
Android
jetpack...
2 commits
# 525,134
Kotlin
HTML
Shell
kotlin-...
1 commit
# 84,508
Swift
C++
cocoapo...
uicolle...
1 commit

logo

Napier is a logger library for Kotlin Multiplatform.
It supports for the Android, Darwin(iOS, macOS, watchOS, tvOS), JVM, JavaScript.
Logs written in common module are displayed on logger viewer of each platform.

Preview

Android

format:

[Class name]$[Method name]: [Your log]

uses the

android.util.Log
(Logcat)

preview-android

Darwin(iOS, macOS, watchOS, tvOS)[Intel/Apple silicon]

format:

[Date time][Symbol][Log level][Class name].[Method name] - [Your log]

Added

[async]
label at the end, if it is called from suspend functions.

uses the

print

preview-ios

JavaScript

uses the

console.log

preview-js

JVM

uses the

java.util.logging.Logger

preview-jvm

  • common sample code
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)
    }
}

}

Download

Repository

You can download this library from MavenCentral or jCenter repository.

  • Maven central

You can download this from

1.4.1
.
Package name is
io.github.aakira
repositories {
    mavenCentral() 
}
  • jCenter

You can download this until

1.4.1
.
Package name is
com.github.aakira
repositories {
    jCenter()
}

Version

Set the version name in your build.gradle

Maven Central

def napierVersion = "[latest version]"

Common

Add the dependency to your commonMain dependencies

  • groovy
sourceSets {
    commonMain {
        dependencies {
            // ...
            implementation "io.github.aakira:napier:$napierVersion"
        }
    }
}
  • kts
sourceSets {
    val commonMain by getting {
        dependencies {
            implementation("io.github.aakira:napier:$napierVersion")
        }
    }
}

Usage

How to use

Common module

// 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) }

Initialize

You must initialize the Napier in your module.

Android

Napier.base(DebugAntilog())

iOS

  • Write initialize code in your kotlin mpp project.
fun debugBuild() {
    Napier.base(DebugAntilog())
}

|argument|type|description| |-|-| |coroutinesSuffix|Boolean|Added

[async]
label at the end, if it is called from suspend functions|
  • Call initialize code from ios project.
NapierProxyKt.debugBuild()

Clear antilog

Napier.takeLogarithm()

Log level

| Platform | Sample | |:--------------|:------------| | VERBOSE | Napier.v() | | DEBUG | Napier.d() | | INFO | Napier.i() | | WARNING | Napier.w() | | ERROR | Napier.e() | | ASSERT | Napier.wtf()|

Run background thread

You can use this library on the background thread on iOS using Kotlin.coroutines as native-mt.

  • Define scope
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

}

  • Usage
backgroundScope.launch {
    suspendFunction()
}

Advancement

You can inject custom

Antilog
.
So, you should change Antilogs in debug build or release build.

Crashlytics

Crashlytics AntiLog samples

Sample projects use the Firebase Crashlytics.
You must set authentication files to

android/google-services.json
and
ios/Napier/GoogleService-Info.plist
.

Check the firebase document. [Android, iOS]

Write this in your application class.

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))

}

Write this in your 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

License

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

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.

Credit

This library is inspired by Timber.
I recommend use it if it supports kotlin multiplatform project.😜

Thanks for advice.
@horita-yuya, @terachanple

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.