8

以下Android logcat 文件存储在哪里?我了解到 logcat 被保存为内核中的内部环形缓冲区,大小为 256kb。应用程序使用特殊的 API 要求内核保存日志。

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

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

奖励指向解释重新启动时会发生什么的人,是否在重新启动之间保存日志?

4

1 回答 1

10

以下是我对logcat的理解,可能有一些错误,欢迎大家提出意见:

  1. 关于手机中的日志文件:从我们可以看到所有日志默认frameworks/base/core/jni/android_util_Log.cpp 都会写入您设备的文件夹中。/dev/log/main 会写入/dev/log/main radio 会写入/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 方法。如果您对它感兴趣,您可以阅读源代码以了解它在那里所做的事情。

  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);
于 2013-05-29T09:25:56.037 回答