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
삽입할 수 있습니다.
따라서 디버그 빌드나 릴리스 빌드에서 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.
이 라이브러리는 Timber에서 영감을 받았습니다.
Kotlin 멀티플랫폼 프로젝트를 지원한다면 사용을 추천드립니다.?
조언해주셔서 감사합니다.
@horita-yuya, @terachanple