Skip to main content

How to filter Timber log messages based on log level in Kotlin Android

How to filter Timber log messages based on log level in Kotlin Android.

Here is a detailed step-by-step tutorial on how to filter Timber log messages based on log level in Kotlin Android.

Step 1: Add Timber library to your project

To get started, you need to add the Timber library to your project. Open your app-level build.gradle file and add the following dependency:

implementation 'com.jakewharton.timber:timber:4.7.1'

Sync your project with Gradle to download the library.

Step 2: Initialize Timber in your Application class

Next, you need to initialize Timber in your Application class. If you don't have an Application class, create one by extending the Application class. If you already have an Application class, open it and add the following code:

import timber.log.Timber

class MyApplication : Application() {
override fun onCreate() {
super.onCreate()

if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
} else {
// Add production tree here if needed
}
}
}

In the onCreate() method, we check if the app is in debug mode using BuildConfig.DEBUG. If it is in debug mode, we plant a DebugTree, which logs all messages to Logcat. You can also add a production tree here if needed.

Don't forget to update your AndroidManifest.xml file to use your custom Application class:

<application
android:name=".MyApplication"
...

Step 3: Use Timber for logging

Now that Timber is set up, you can use it for logging throughout your application. Timber provides different log levels like DEBUG, INFO, WARN, ERROR, etc.

Here's an example of how you can use Timber to log a message with a specific log level:

import timber.log.Timber

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

Timber.d("This is a debug log message")
Timber.i("This is an info log message")
Timber.w("This is a warning log message")
Timber.e("This is an error log message")
}
}

The log messages will be displayed in Logcat with the corresponding log level tag.

Step 4: Filter Timber log messages by log level

To filter Timber log messages based on log level, you can create a custom Tree implementation. Here's an example:

import timber.log.Timber

class LogLevelTree(private val logLevel: Int) : Timber.DebugTree() {
override fun isLoggable(tag: String?, priority: Int): Boolean {
return priority >= logLevel
}
}

In this example, we create a custom Tree implementation called LogLevelTree that extends Timber.DebugTree. We override the isLoggable() method and check if the log priority is greater than or equal to the specified log level. If it is, the log message is considered loggable.

To use the custom LogLevelTree, you need to update your Application class:

import timber.log.Timber

class MyApplication : Application() {
override fun onCreate() {
super.onCreate()

if (BuildConfig.DEBUG) {
Timber.plant(LogLevelTree(Log.DEBUG))
} else {
// Add production tree here if needed
}
}
}

In this example, we use Log.DEBUG as the log level, which means only log messages with a priority of DEBUG or higher will be logged.

You can change the log level as per your requirements. For example, if you only want to log messages with a priority of ERROR or higher, you can use Log.ERROR as the log level.

That's it! Now you know how to filter Timber log messages based on log level in Kotlin Android.