15

我想在 LogCat 中插入一个日志,当我单击它时会跳转到它的行,就像系统生成的一些错误日志一样。

是否可以?

4

6 回答 6

15

我找到了:

public static void showLogCat(String tag, String msg) {

        StackTraceElement[] stackTraceElement = Thread.currentThread()
                .getStackTrace();
        int currentIndex = -1;
        for (int i = 0; i < stackTraceElement.length; i++) {
            if (stackTraceElement[i].getMethodName().compareTo("showLogCat") == 0)
            {
                currentIndex = i + 1;
                break;
            }
        }

        String fullClassName = stackTraceElement[currentIndex].getClassName();
        String className = fullClassName.substring(fullClassName
                .lastIndexOf(".") + 1);
        String methodName = stackTraceElement[currentIndex].getMethodName();
        String lineNumber = String
                .valueOf(stackTraceElement[currentIndex].getLineNumber());

        Log.i(tag, msg);
        Log.i(tag + " position", "at " + fullClassName + "." + methodName + "("
                + className + ".java:" + lineNumber + ")");

    }

它的用法:

showLogCat("tag", "message");
于 2012-05-15T10:57:22.083 回答
4

"(X:Y)"重要的是在您的日志消息中插入X您想要的文件名,并且Y是您想要的X (我从@breceivemail 的回答中了解到)。所以试试:

public static void log(final String tag, final String msg) {
    final StackTraceElement stackTrace = new Exception().getStackTrace()[1];

    String fileName = stackTrace.getFileName();
    if (fileName == null) fileName="";  // It is necessary if you want to use proguard obfuscation.

    final String info = stackTrace.getMethodName() + " (" + fileName + ":"
            + stackTrace.getLineNumber() + ")";

    Log.LEVEL(tag, info + ": " + msg);
}

注意:是日志级别,LEVEL可以是vdi、或。wewtf

现在您可以使用log(tag, msg)而不是Log.LEVEL(tag, msg).


例子:

MainActivity.java

...
public class MainActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        log("Test Tag", "Hello World!");

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
    ...

输出:

12-30 14:24:45.343 ? I/Test Tag: onCreate (MainActivity.java:10): Hello World!

MainActivity.java:10自动成为一个链接,您可以点击它!


info如果您想要更详细的日志,还可以将以下值分配给变量:

final String info = stackTrace.getClassName() + "." + stackTrace.getMethodName() + " ("
            + fileName + ":" + stackTrace.getLineNumber() + ")\n";

所以上面例子的输出是:

12-30 14:33:07.360 ? I/Test Tag: com.example.myapp.MainActivity.onCreate (MainActivity.java:11)
                                 Hello World!    
于 2016-12-30T11:09:13.543 回答
2

请将此树与木材一起使用。

class MyLinkingTimberTree : Timber.DebugTree() {
    override fun createStackElementTag(element: StackTraceElement): String? {
        return makeClickableLineNumber(element)
    }

    private fun makeClickableLineNumber(
        element: StackTraceElement
    ): String {
        val className = element.fileName
        val methodName = element.methodName
        val lineNumber = element.lineNumber
        val fileName = element.fileName
        val stringBuilder = StringBuilder(className)
        .append(".")
        .append(methodName)
        .append(" (")
        .append(fileName)
        .append(":")
        .append(lineNumber)
        .append(")  ")
        return stringBuilder.toString()
    }
}

然后像这样实例化它:

class MyApplication: Application() {

    override fun onCreate() {
        super.onCreate()
        if(BuildConfig.DEBUG) {
            Timber.plant(MyLinkingTimberTree())
        }
    }
}

然后正常使用 Timber:

Timber.d("Currently Signed in:")

这就是结果。不错,不是吗?我希望你喜欢使用它,就像我喜欢制作它一样!;)

带logcat的链接!

于 2020-04-17T07:29:18.403 回答
0

是的,你可以做到..按照SO-logging上回答的示例进行操作

于 2012-05-15T09:44:14.110 回答
0

用简单的方式回答这个问题:

尊敬的 cette règle :

{FileName}.{ext}:{LigneNumber}

e.g. MainActivity.java:10

它给出了如下示例

Log.d(TAG, "onResume: MainActivity.java:10");

我希望这能帮到您

于 2018-02-21T16:28:07.753 回答
0

这并不完全是问题的答案,但也许它是一个“足够接近”的解决方法。

  1. 突出显示日志文本
  2. 按 CTRL-SHIFT-F
  3. 双击搜索结果。

如果在按 CTRL-SHIFT-F 之前突出显示文本,则无需键入或复制/粘贴。
搜索结果截图

如果您的搜索倾向于产生太多结果,您可以使用实时模板创建唯一的 logcat 条目:

创建一个实时模板以插入类、方法和行号(在撰写本文时)。我用“logi”。是的,随着您继续编写,行号将变得越来越不准确,但它仍然可以作为使您的日志条目更“可查找”的一种方式。

实时模板截图

于 2020-02-27T17:55:41.363 回答