Napier é uma biblioteca de loggers para Kotlin Multiplatform.
Suporta Android, Darwin (iOS, macOS, watchOS, tvOS), JVM, JavaScript.
Os logs escritos no módulo comum são exibidos no visualizador de logs de cada plataforma.
formato: [Class name]$[Method name]: [Your log]
usa o android.util.Log
(Logcat)
formato: [Date time][Symbol][Log level][Class name].[Method name] - [Your log]
Adicionado rótulo [async]
no final, se for chamado a partir de funções de suspensão.
usa a print
usa o console.log
usa o 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)
}
}
}
Você pode baixar esta biblioteca do repositório MavenCentral ou jCenter.
Você pode fazer o download em 1.4.1
.
O nome do pacote é io.github.aakira
repositories {
mavenCentral()
}
Você pode fazer o download até 1.4.1
.
O nome do pacote é com.github.aakira
repositories {
jCenter()
}
Defina o nome da versão em seu build.gradle
def napierVersion = "[latest version]"
Adicione a dependência às suas dependências 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 " }
Você deve inicializar o Napier em seu módulo.
Napier .base( DebugAntilog ())
fun debugBuild () {
Napier .base( DebugAntilog ())
}
|argumento|tipo|descrição| |-|-| |coroutinesSuffix|Boolean|Adicionado rótulo [async]
no final, se for chamado a partir de funções de suspensão|
NapierProxyKt . debugBuild ( )
Napier .takeLogarithm()
Plataforma | Amostra |
---|---|
VERBOSO | Napier.v() |
DEPURAR | Napier.d() |
INFORMAÇÕES | Napier.i() |
AVISO | Napier.w() |
ERRO | Napier.e() |
AFIRMAR | Napier.wtf() |
Você pode usar esta biblioteca no thread de segundo plano no iOS usando Kotlin.coroutines como nativo-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()
}
Você pode injetar Antilog
personalizado.
Portanto, você deve alterar os Antilogs na compilação de depuração ou na compilação de lançamento.
Amostras do Crashlytics AntiLog
Projetos de amostra usam o Firebase Crashlytics.
Você deve definir os arquivos de autenticação para android/google-services.json
e ios/Napier/GoogleService-Info.plist
.
Verifique o documento do Firebase. [Android, iOS]
Escreva isso na sua classe de aplicação.
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 ))
}
Escreva isso em seu 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.
Esta biblioteca é inspirada em Timber.
Eu recomendo usá-lo se ele suportar o projeto multiplataforma Kotlin.
Obrigado pelo conselho.
@horita-yuya, @terachanple