کتابخانه timber ، در این پست به صورت کامل به کتابخانه timber از Jake Wharton میپردازیم.
به اختصار این کتابخانه را ما بجای کلاس Log پیشفرض خود اندروید که بصورت کامل android.util.log میباشد.
اما دلیل جایگزینی این کتابخانه این ست که میتوان لاگ هارا خیلی کاستومایز یا به عبارت دیگر سفارشی سازی شده تر پیاده کرد که در این پست نمونه هایی از کاستوم کردن لاگ log یا گرفتن لاگ بهتر در اندروید رو با مثال خواهیم دید
به گفته خود نویسنده
A logger with a small, extensible API which provides utility on top of Android’s normal Log class.
یک لاگر logger با یک Api کوچک و قابل گسترش که میتواند ابزارها (لاگ ها) در بالای لاگ های نرمال کلاس های اندروید نمایش دهد.
برای اضافه کردن یک instance یا نمونه از کتابخانه timber کافیه که بدین صورت کد بزنیم
Timber.plant(Tree)
که بهترین مکان برای فراخوانی این کد در کلاس Application برنامه و onCreate آن ست
پیاده سازی DebugTree به طور خودکار برای هرکلاس که کد فوق را پیاده کرد باشد انجام میشود و همچنین نام کلاس به عنوان Tag لاگ نیز ذکر میشود.
مراحل استفاده نیز خیلی ساده ست
دو مرحله فوق رو کمی واضح تر درادامه پست توضیح خواهیم داد
۱- یک پروژه اندروید بسازید (من از زبان کاتلین استفاده میکنم اما این کتابخانه با هر دو زبان جاوا و کاتلین کاملا سازگاره ! )
و وابستگی یا dependency زیر رو اضافه کنید و در نهایت sync
implementation 'com.jakewharton.timber:timber:4.7.1'
۲- حالا یک کلاس که از Application ارث بری میکنه بسازید و تکه کد plant کتابخانه timber رو به اون اضافه کنید به صورت زیر
package dn.marjan.timbersample
import android.app.Application
import timber.log.Timber
import timber.log.Timber.DebugTree
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
Timber.plant(DebugTree())
}
}
کلاس DebugTree مربوط به خود کتابخانه timber هست اما میتونیم هر کلاس کاستومایز شده دیگه ای که از Timber.Tree ارث بری کنه رو بسازیم و ساختار لاگ رو بسته به سلیقه خودمون پیاده کنیم !
کلاس اپلیکیشن رو همچنین در منیفست برنامه بصورت زیر در تگ application مشخص خواهیم کرد
<application
android:name=".MyApplication"
…
۳- در نهایت اکتیویتی که زمان ساخت پروژه ایجاد شده را به صورت زیر تغییر میدیم
package dn.marjan.timbersample
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.demo_activity.*
import timber.log.Timber
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
Timber.i("onCreate")
super.onCreate(savedInstanceState)
setContentView(R.layout.demo_activity)
// Timber.tag("LifeCycles")
// Timber.d("Activity Created")
btn_hello.setOnClickListener { greetingClicked("btn_hello") }
btn_hey.setOnClickListener { greetingClicked("btn_hey") }
btn_hi.setOnClickListener { greetingClicked("btn_hi") }
}
fun greetingClicked(btnText: String) {
Timber.i("A button with clicked to say '$btnText'.")
Toast.makeText(this, "Check logcat for a greeting!", Toast.LENGTH_SHORT).show()
}
override fun onStart() {
Timber.i("onStart")
super.onStart()
}
override fun onRestart() {
Timber.i("onRestart")
super.onRestart()
}
override fun onResume() {
Timber.i("onResume")
super.onResume()
}
override fun onPause() {
Timber.i("onPause")
super.onPause()
}
override fun onDestroy() {
Timber.i("onDestroy")
super.onDestroy()
}
}
توجه کنید که لاگ هایی که ایجاد شده صرفا برای مشاهده لاگ بیشتر در لاگ کت هستش 🙂
پس از اجرای برنامه لاگ کت بصورت زیر خواهد بود
همونطور که میبینید نام اکتیوتی که در اون لاگ ایجاد کردیم بصورت اتوماتیک برای tag ست شده MainActivity
همچنین با کلیک هرکدام از دکمه ها لاگی که نوشته شده نیز ایجاد میشود.
به همین سادگی کار با کتابخانه Timber رو یاد گرفتیم 😀
اما میتونیم کمی لاگ ها رو کاستومایز تر کنیم
بدین صورت که کلاس DebugTree رو بصورت زیر تغییر بدیم
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(object : DebugTree(){
override fun createStackElementTag(element: StackTraceElement): String? {
return super.createStackElementTag(element) + " ${element.className} ${element.fileName} ${element.lineNumber} "
}
})
}
همونطور که میبینید این کلاس همچین اختیاراتی رو به ما میده که به برخی خصوصیات کلاسی که در اون با کتابخانه Timber لاگ ایجاد شده دسترسی کامل داشته باشیم مثل خطی که لاگ ایجادشده
مسیر کامل ونام کلاسی و همچنین نام فایل به تنهایی
حالا اگر پروژه رو ران کنیم اطلاعات در لاگ کت بصورت زیر تغییر خواهد کرد