如何保存logcat消息

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

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

任何人都可以解释如何工作? 我正在寻findhttps://github.com/cgjones/android-system-core/blob/master/logcat/logcat.cpp ,我不明白的确切细节。

奖金指向解释重新启动时发生的事情的人,是在重新启动之间保存的日志?

Solutions Collecting From Web of "如何保存logcat消息"

这里是我对logcat的理解,也许有一些错误,欢迎提出意见:

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

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

  3. 关于如何生成日志:如果您看到android.util.log的源代码,您可以find所有的log.d / log.e将使用JNI方法将日志写入日志文件,如上所述。

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

    你可以在这里findJNI方法。 如果你有兴趣,你可以阅读源代码,find它在做什么。

  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);