如何保存logcat消息

时间:2013-05-28 07:50:48

标签: android logcat android-logcat

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

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

任何人都可以解释这是如何工作的吗?我正在调查https://github.com/cgjones/android-system-core/blob/master/logcat/logcat.cpp,我无法理解确切的细节。

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

1 个答案:

答案 0 :(得分:10)

这是我对logcat的理解,也许有一些错误,欢迎任何评论:

  1. 关于手机中的日志文件: 来自frameworks/base/core/jni/android_util_Log.cpp 我们可以看到默认情况下所有日志都会写入设备的/dev/log/文件夹中。 main将被写入/dev/log/main 收音机将被写入/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的日志到您自己的文件中。

  5. 例如:

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