Logcat: 使用 'Log' 进行输出 class 显示完整包名

Logcat: make output using 'Log' class show full package name

我在我的代码中使用相同的 class 语句,如下所示:

Log.i(TAG, "Writing command to initialize the FORA");

Log.i(TAG, "onDescriptorWrite signaled with status " + status);

然而第一​​个的输出是

Writing command to initialize the FORA

但是第二个是

04-11 08:01:13.109 9030-9139/? I/com.lampreynetworks.ahd.transport.btle.b: onDescriptorWrite signaled with status 0

在这两种情况下,我都希望输出带有包名。我认为这是由 TAG 决定的,在我的例子中是

private static final String TAG = AndroidBtleHandler.class.getName();

我认为这可能是因为某些语句位于 class 中的 class 中,但事实并非如此。我需要做什么才能在 logcat 输出中获取完整的包名称?

public class 应用 {

public static String getTag() {
    String tag = "";
    final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
    for (int i = 0; i < ste.length; i++) {
        if (ste[i].getMethodName().equals("getTag")) {
            tag = "("+ste[i + 1].getFileName() + ":" + ste[i + 1].getLineNumber()+")";
        }
    }
    return tag;
}

}

而不是 Log.i(TAG, "Writing command to initialize the FORA");使用 Log.i(App.getTag(), "Writing command to initialize the FORA")

它不依赖于消息本身。如果您在 Logcat 中使用来自同一个 class 的 Log.i() 直接关注信息日志,则只有第一个显示 class 名称。 (我不知道为什么会这样。) Log.w() 也是一样。

如果您使用 Log.d(),则每次都会显示 class 名称。