Napier — это библиотека журналов для мультиплатформы Kotlin.
Он поддерживает 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]"
Добавьте зависимость к вашим общим основным зависимостям.
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()
Платформа | Образец |
---|---|
ПОДРОБНЫЙ | Напье.в() |
ОТЛАЖИВАТЬ | Напье.д() |
ИНФОРМАЦИЯ | Напье.i() |
ПРЕДУПРЕЖДЕНИЕ | Напье.w() |
ОШИБКА | Napier.e() |
УТВЕРЖДАТЬ | Напье.wtf() |
Вы можете использовать эту библиотеку в фоновом потоке на iOS, используя Kotlin.coroutines в качестве родного-mt.
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
.
Итак, вам следует изменить Antilogs в отладочной или выпускной сборке.
Примеры 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.
Эта библиотека вдохновлена Timber.
Я рекомендую использовать его, если он поддерживает мультиплатформенный проект Kotlin.?
Спасибо за совет.
@horita-yuya, @terachanple