在具有自动标记功能的单独模块中使用木材

beh*_*lit 1 logging android kotlin timber-android

我想在单独的模块中使用 wood 来处理我的 Android 应用程序中的日志记录,以便可以从任何模块调用它并记录到内部文件。

问题是,当在单独的类中使用自动标记而不是直接调用木材日志方法时,自动标记不起作用。

例如,我有一个日志记录类,其方法为Logger.kt

fun d(message: String)
{
    Timber.d(message)
}
Run Code Online (Sandbox Code Playgroud)

但是当我从任何地方调用它时,它显然使用日志类作为标记,而不是调用该方法的类。

所以我的问题是,如何通过此方法自动传递调用类?我不想添加像“TAG = classname”这样的附加变量,因为在这种情况下我也可以使用正常的日志记录。

是否可以检索方法的调用类?或者有更好的方法来进行集中日志记录吗?主要目的是不必定义 TAG 变量,同时还能够稍后添加文件日志记录。

dan*_*dan 5

您可以使用扩展函数,例如:

fun Any.logd(message: String){
  Timber.tag(this.javaClass.simpleName).d(message)
}
Run Code Online (Sandbox Code Playgroud)

这样,该logd方法将在任何地方可用,并且不会与默认日志行为发生冲突。

this.javaClass.simpleName用作标记,并将与实际调用者类名称一起记录。