Timber中的日志方法名称和行号

Ism*_*ita 12 android timber-android

是否可以使用Timber库记录当前行号和方法名称?

预期的LogCat结果:

ismaeldivita.myapp I/[L:22] [M:onResume] [C:HomeActivity]: Praise the log!
Run Code Online (Sandbox Code Playgroud)

Ism*_*ita 32

回答我自己的问题.

只需创建一个新的DebugTree类

public class MyDebugTree extends Timber.DebugTree {    
    @Override
    protected String createStackElementTag(StackTraceElement element) {
        return String.format("[L:%s] [M:%s] [C:%s]",
                element.getLineNumber(),
                element.getMethodName(),
                super.createStackElementTag(element));
    }
}
Run Code Online (Sandbox Code Playgroud)

在树林里种植你的树:

public class App extends Application {
    @Override
    public void onCreate(){
        super.onCreate();
        if (BuildConfig.DEBUG) {
           Timber.plant(new MyDebugTree());
        } else {
           //TODO plant your Production Tree
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它看起来很棒.但我认为,我们可以改变格式,像这样的:`返回的String.format( "[%S#%S:%s]的",super.createStackElementTag(元素),element.getMethodName(),element.getLineNumber()); `因此我们可以复制该代码,然后使用CMD + O导航到该代码. (4认同)

hum*_*zed 14

对Ismael Di Vita进行改进,以便在logcat中显示为这样的超链接.

public class MyDebugTree extends Timber.DebugTree {     
    @Override 
    protected String createStackElementTag(StackTraceElement element) {
        return String.format("(%s:%s)#%s",
            element.getFileName(),
            element.getLineNumber(),
            element.getMethodName());
    } 
} 
Run Code Online (Sandbox Code Playgroud)

或者对于kotlin

class LineNumberDebugTree : Timber.DebugTree() {
override fun createStackElementTag(element: StackTraceElement): String? {
    return "(${element.fileName}:${element.lineNumber})#${element.methodName}"
}
Run Code Online (Sandbox Code Playgroud)

}

注意:使用element.fileName而不是element.className,因此它可以在kotlin中用于在类外部进行日志记录

来自我的utils lib


Rom*_*man 6

这就是我在我的应用程序类中使用 Kotlin 解决这个问题的方法:

class App : Application() {

override fun onCreate() {
    super.onCreate()
    initLogger()
}

private fun initLogger() {
    if (BuildConfig.DEBUG) {
        Timber.plant(object : Timber.DebugTree() {
            override fun createStackElementTag(element: StackTraceElement): String? {
                return "(${element.fileName}:${element.lineNumber})#${element.methodName}"
            }
        })
    }
}
Run Code Online (Sandbox Code Playgroud)