以下是我对logcat的理解,可能有一些错误,欢迎大家提出意见:
关于手机中的日志文件:从我们可以看到所有日志默认frameworks/base/core/jni/android_util_Log.cpp
都会写入您设备的文件夹中。/dev/log/
main 会写入/dev/log/main
radio 会写入/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 方法。如果您对它感兴趣,您可以阅读源代码以了解它在那里所做的事情。
将 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);