Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to tell Timber which log call is for which Tree?

I have Timber library for logging and cooperation with crash-reporting services and I have both Crashlytics and Loggly services in my app.

Thus, I had to plant two trees:

Timber.plant(new CrashlyticsTree());
Timber.plant(new LogglyTree(BuildConfig.LOGGLY_TOKEN));

Now, each time I call:

Timber.e("bla bla");

I get all the logs in Loggly, but I want some of them to go to Loggly and some of them to go to Crashlytics, so how do I do that?

like image 665
Kaloyan Roussev Avatar asked Feb 23 '16 12:02

Kaloyan Roussev


People also ask

How do you measure tree logs?

Face the tree to be measured and hold the stick vertically at a distance of 25 inches from your eye (Figure 4). Be sure that the scale "Number of 16-foot logs" is facing you. As with measuring diameter, this distance of 25 inches is critical to obtain accurate measurements.

What is timber Log?

Logging, or commercial logging, involves cutting trees for sale as timber or pulp. The timber is used to build homes, furniture, etc and the pulp is used to make paper and paper products. Logging is generally categorized into two categories: selective and clear-cutting.

What is timber tree Android?

Timber is an open-source logging library developed by Jake Wharton, which provides additional features on top of Android's normal Log class.


1 Answers

Turns out every call to .e or .w for example, iterates through all planted trees and calls their respective .e and .w implementations.

This means that if I wanted to separate Library A and Library B I needed to use different logging priority for each.

So I chose to use .e for Library A and .w for Library B.

In order to do that, I had to create custom trees that inherit from Timber.HollowTree and only implement the needed log call, and leave the rest of them hollow.

public class LibraryATree extends Timber.HollowTree {
    @Override
    public void e(Args){
        // Do something
    }
}

public class LibraryBTree extends Timber.HollowTree {
    @Override
    public void w(Args){
        // Do something
    }
}

Timber.plant(new LibraryATree())
Timber.plant(new LibraryBTree())

Now in my code, if I want to log something via LibraryA, I do this:

Timber.e("Test Library A"); // calls LibraryA's Tree's `.e` method

and if I wanted to use Library B's logging utilities I do this:

Timber.w("Test Library B"); // calls LibraryB's Tree's `.w` method
like image 172
Kaloyan Roussev Avatar answered Sep 28 '22 03:09

Kaloyan Roussev