Timber Kotlin: पूरी गाइड उदाहरणों के साथ
1. यह क्या है और क्यों ज़रूरी है
Timber एक हल्की-फुल्की लाइब्रेरी है जो Android ऐप्स में लॉगिंग के लिए Kotlin में लिखी गई है। इसे Jake Wharton ने बनाया है, जो Retrofit, OkHttp और Dagger जैसे प्रोजेक्ट्स के लिए मशहूर एक टॉप Android डेवलपर हैं। Timber का मुख्य उद्देश्य डेवलपर को लॉगिंग के दौरान बार-बार लिखे जाने वाले कोड से बचाना और डेवलपमेंट के अलग-अलग चरणों में लॉग्स को मैनेज करने का एक लचीला तरीका देना है।
जब पहले से android.util.Log मौजूद है, तो Timber की क्या ज़रूरत है? पहली बात, Timber हर लॉग में अपने आप क्लास और मेथड का नाम जोड़ देता है, जिससे ट्रेसिंग बहुत आसान हो जाती है। अब आपको Log.d(TAG, "message") लिखने की ज़रूरत नहीं है — बस Timber.d("message") कॉल करना काफी है। दूसरी बात, Timber में "ट्री" (Trees) की एक सिस्टम है, जो लॉग्स को अलग-अलग चैनलों में बांटने की सुविधा देती है: जैसे, debug बिल्ड में सब कुछ Logcat में दिखाएं, और release बिल्ड में सिर्फ एरर Crashlytics या किसी दूसरे एनालिटिक्स सर्विस पर भेजें।
तीसरा बड़ा फायदा — Timber release बिल्ड में अपने आप सभी लॉग्स को बंद कर देता है, जब तक कि आप प्रोडक्शन के लिए कोई खास ट्री सेट न करें। इससे न सिर्फ परफॉरमेंस बेहतर होती है, बल्कि लॉग्स के ज़रिए संवेदनशील डेटा लीक होने से भी बचाव होता है। यह लाइब्रेरी इतनी लोकप्रिय है कि हज़ारों कमर्शियल प्रोजेक्ट्स में इस्तेमाल होती है और Google खुद Android डेवलपमेंट की आधिकारिक गाइड में इसे सुझाता है।
2. इंस्टॉलेशन
Timber Maven Central के ज़रिए उपलब्ध है। इसे इंस्टॉल करने के लिए build.gradle फ़ाइल (मॉड्यूल लेवल) में डिपेंडेंसी जोड़ें:
dependencies {
implementation 'com.jakewharton.timber:timber:5.0.1'
}
अगर आप Kotlin DSL (build.gradle.kts) इस्तेमाल कर रहे हैं:
dependencies {
implementation("com.jakewharton.timber:timber:5.0.1")
}
Gradle सिंक करने के बाद लाइब्रेरी इस्तेमाल के लिए तैयार है। ध्यान दें: Timber को AndroidManifest.xml में किसी अतिरिक्त अनुमति की ज़रूरत नहीं है।
3. तुरंत शुरुआत — न्यूनतम काम करने वाला उदाहरण
शुरू करने के लिए एक "ट्री लगाना" (plant a tree) ज़रूरी है — यानी लॉग हैंडलर को रजिस्टर करना। सबसे आसान तरीका है बिल्ट-इन Timber.DebugTree का इस्तेमाल करना, जो DEBUG लेवल और उससे ऊपर के लॉग्स को Logcat में दिखाता है:
import timber.log.Timber
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
}
}
अब ऐप में कहीं भी लॉग लिख सकते हैं:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Timber.d("Activity created")
Timber.i("User opened main screen")
Timber.w("Something suspicious happened")
Timber.e("Error occurred: %s", "Network timeout")
}
}
Logcat में आप कुछ इस तरह देखेंगे:
D/MainActivity: Activity created
I/MainActivity: User opened main screen
W/MainActivity: Something suspicious happened
E/MainActivity: Error occurred: Network timeout
ध्यान दें: Timber ने अपने आप क्लास का नाम (MainActivity) पहचान लिया और उसे टैग में जोड़ दिया। अब आपको मैन्युअली TAG कॉन्स्टेंट बनाने की ज़रूरत नहीं है।
4. मुख्य तरीके/फंक्शन/क्लासेस
4.1. Timber.d() — Debug लॉगिंग
सिग्नेचर: fun d(message: String, vararg args: Any?)
क्या करता है: DEBUG लेवल के साथ एक डीबग संदेश दिखाता है। डेवलपमेंट के दौरान अस्थायी लॉग्स के लिए इस्तेमाल होता है। release बिल्ड में डिफ़ॉल्ट रूप से नहीं दिखता।
Timber. पुस्तकालय में भी
Kingfisher Swift: पूरी गाइड उदाहरणों के साथ
जावा में JSON प्रोसेसिंग: डेटा के साथ काम करने के लिए Jackson और Gson लाइब्रेरीज़
Swagger/OpenAPI जनरेशन JavaScript (Node.js) के लिए — टूल्स और लाइब्रेरीज़