gpt4 book ai didi

android - 如何保存 logcat 消息

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:37 26 4
gpt4 key购买 nike

正在关注 Where are Android logcat files stored?我了解到 logcat 在内核中保存为一个内部环形缓冲区,大小为 256kb。应用程序使用特殊的 API 请求内核保存日志。

我的设备日志比 wayyyyyy 大很多。我知道这一点,因为当我 adb logcat > adblogcat.txt 时,我得到了一个非常大的文件。这意味着“某事”清除了内核缓冲区并将它们存储在文件系统中 (?) 并且 adb logcat 从这个更大的文件中读取。

谁能解释一下这是如何工作的?我正在调查 https://github.com/cgjones/android-system-core/blob/master/logcat/logcat.cpp我无法理解确切的细节。

如果有人解释重启时会发生什么,日志会在两次重启之间保存吗?

最佳答案

以上是我对logcat的理解,可能有错误,欢迎大家指正:

  1. 关于手机中的日志文件:来自frameworks/base/core/jni/android_util_Log.cpp我们可以看到默认情况下,所有日志都会写入设备中的 /dev/log/ 文件夹中。main会写入/dev/log/mainradio 将写入 /dev/log/radio...因为都是操作系统的I/O文件。所以在手机重启的时候会有清除。并且这些文件的大小有一定的限制,如果大小达到限制,旧的日志将被覆盖。

  2. 关于 Logcat:Logcat 是一种读取或重新输出日志文件的工具。它安装在手机的 system/bin/文件夹中。我没有阅读logcat.cpp的每一个代码;但我可以说 logcat 应用程序将默认读取 system/logcat/main 中的日志文件,并根据您使用的参数将它们输出到屏幕或文件中。

  3. 关于日志的生成方式:如果你看到 android.util.log 的源代码,你会发现所有的log.d/log.e都会使用JNI方法将日志写入日志文件,如前所述。

    public static native int println_native(int bufID,int priority, String tag, String msg);

    您可以找到 JNI 方法 here .如果你对它感兴趣,你可以阅读源代码,看看它在那里做了什么。

  4. 将 logcat 保存到您想要的特定文件:基于Log I/O,开发者可以编写一个应用程序将日志保存到手机SD卡中的一个文件中,这样我们就可以保存更多的日志或者更大的日志文件。最简单的方法是使用 Runtime.exec() 来执行 logcat 应用程序:您可以监控 BOOT 完成接收器以启动您的 logcat 命令,以将所有 logcat 的日志读取到您自己的文件中。

例如:

 String cmd = "logcat -v time -f yourown.file"
Process process = Runtime.getRuntime().exec(cmd);

关于android - 如何保存 logcat 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com