Android 如何保存logcat消息

Android 如何保存logcat消息,android,logcat,android-logcat,Android,Logcat,Android Logcat,接下来,我了解到logcat被保存为内核中的一个内部环形缓冲区,大小为256kb。应用程序使用特殊的API要求内核保存日志 我的设备日志要大YYYY倍。我知道这一点,因为当我adb logcat>adblogcat.txt我得到一个非常大的文件。这意味着“某物”清除内核缓冲区并将它们存储在文件系统(?)中,并且adb logcat从这个较大的文件读取数据 有人能解释一下这是怎么回事吗?我正在调查,我无法理解确切的细节 如果有人解释了重新启动时会发生什么,那么日志是否在重新启动之间保存?以下是我对

接下来,我了解到logcat被保存为内核中的一个内部环形缓冲区,大小为256kb。应用程序使用特殊的API要求内核保存日志

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

有人能解释一下这是怎么回事吗?我正在调查,我无法理解确切的细节


如果有人解释了重新启动时会发生什么,那么日志是否在重新启动之间保存?

以下是我对logcat的理解,可能有一些错误,欢迎评论:

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

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

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

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

    您可以找到JNI方法。如果您对它感兴趣,您可以阅读源代码以了解它在那里做什么

  • 将logcat保存到所需的特定文件: 基于日志I/O,开发人员可以编写一个应用程序将日志保存到手机SD卡中的文件中,这样我们就可以保留更多的日志或更大的日志文件。 最简单的方法是使用
    Runtime.exec()
    执行logcat应用程序: 您可以监视引导完成的接收器,以启动logcat命令,将所有logcat的日志读取到您自己的文件中

  • 例如:

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

    关于4,我会在init.rc中这样做,作为启动时启动的脚本。是的,我想它可以工作。如下所示:
    service goldfish logcat/system/bin/logcat>>yourfileonsdcard oneshot
    这是一个用于模拟器的脚本。@buptcoder感谢您的精彩概述。我一直在Android文档中寻找这个,但是找不到@buptcoder..我无法在我的手机三星galaxy s5中看到/dev/log/(你能告诉我如何/在哪里找到这个吗?嗨,vinu,如果你的手机没有根目录,你不应该有权限评估dev文件夹。