关注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,我无法理解确切的细节。
奖励指向解释重启时发生的事情的人,是重新启动之间保存的日志吗?
答案 0 :(得分:10)
这是我对logcat的理解,也许有一些错误,欢迎任何评论:
关于手机中的日志文件:
来自frameworks/base/core/jni/android_util_Log.cpp
我们可以看到默认情况下所有日志都会写入设备的/dev/log/
文件夹中。
main将被写入/dev/log/main
收音机将被写入/dev/log/radio
...
因为所有都是操作员系统的I / O文件。因此,重新启动手机时会清除。并且这些文件大小有一些限制,如果大小达到限制,旧日志将被覆盖。
关于Logcat:
Logcat是一种读取或重新输出日志文件的工具。它安装在手机的system / bin /文件夹中。我不会阅读logcat.cpp
的每个代码;但我可以说logcat应用程序将默认读取system / logcat / main中的日志文件,并根据您使用的参数将它们输出到屏幕或文件中。
关于如何生成日志: 如果您看到android.util.log的源代码,您可以发现所有log.d / log.e将使用JNI方法将日志写入日志文件,如上所述。
public static native int println_native(int bufID,int priority, String tag, String msg);
您可以找到JNI方法here。如果您对此感兴趣,可以阅读源代码以查找它在那里做的事情。
将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);