Napier เป็นไลบรารีตัวบันทึกสำหรับ Kotlin Multiplatform
รองรับ Android, ดาร์วิน (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]
ที่ส่วนท้าย หากถูกเรียกจากฟังก์ชัน Suspend
ใช้ 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]
ที่ส่วนท้าย หากถูกเรียกจากฟังก์ชัน Suspend|
NapierProxyKt . debugBuild ( )
Napier .takeLogarithm()
แพลตฟอร์ม | ตัวอย่าง |
---|---|
ละเอียด | เนเปียร์.วี() |
ดีบัก | เนเปียร์.ดี() |
ข้อมูล | เนเปียร์.ไอ() |
คำเตือน | เนเปียร์.w() |
ข้อผิดพลาด | เนเปียร์.อี() |
ยืนยัน | เนเปียร์.wtf() |
คุณสามารถใช้ไลบรารีนี้บนเธรดพื้นหลังบน iOS โดยใช้ Kotlin.coroutines เป็น Native-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 ใน debug build หรือ release build
ตัวอย่าง Crashlytics AntiLog
โปรเจ็กต์ตัวอย่างใช้ Firebase Crashlytics
คุณต้องตั้งค่าไฟล์การตรวจสอบสิทธิ์เป็น android/google-services.json
และ ios/Napier/GoogleService-Info.plist
ตรวจสอบเอกสาร firebase [แอนดรอยด์, ไอโอเอส]
เขียนสิ่งนี้ในคลาสแอปพลิเคชันของคุณ
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.
ห้องสมุดแห่งนี้ได้รับแรงบันดาลใจจากไม้
ฉันแนะนำให้ใช้มันถ้ามันรองรับโครงการหลายแพลตฟอร์ม kotlin?
ขอบคุณสำหรับคำแนะนำ
@horita-yuya, @terachanple