我在 Android 根目录中附加了 init.rc:
service logcat /system/bin/logcat -v long -f /mnt/sdcard/logcat.log
此解决方案不会生成任何日志。logcat.log 文件不存在。
如何开始通过 init.rc 收集 logcat 输出?
我在 Android 根目录中附加了 init.rc:
service logcat /system/bin/logcat -v long -f /mnt/sdcard/logcat.log
此解决方案不会生成任何日志。logcat.log 文件不存在。
如何开始通过 init.rc 收集 logcat 输出?
有几件事可能会导致上述问题: 1. 您将服务定义为 logcat。这看起来非常接近可能是保留/预先存在的名称。我会选择一个更显赫的服务名称。2. 服务没有明确的启动触发器,因此它完全取决于其定义的上下文(即哪个初始化阶段)。选择错误的阶段(即太早)和 /mnt 甚至可能不存在。3. 该服务将默认以 root 身份运行,因此 logcat.log 文件将只能由 root 读写。以 root 身份运行进程并不好。并且为了阅读日志文件而强制读者是 root 也不好。
这是我用来实现您想要做的事情的方法。
问题:通常,Android 日志消息仅保留在内核的(易失性)内存中,因此无法在重新启动后继续存在。
解决方案:要在重新启动后保留这些日志消息,需要将它们写入持久存储(即文件系统)。下面的代码定义了这样一个由 Android 在初始化期间启动的服务。
第 1 步,定义一个服务,Android 初始化进程将生成该服务来执行此活动。这在 init.rc 中。
service persistentLogging /system/bin/logcat -r 1024 -n 9 -v threadTime -f /cache/logs/log
user system
group system log
disabled
以上注意事项:
第二步,定义启动服务的触发器。这也包含在您的 init.rc 文件中。
on post-fs
mkdir /cache/logs 0775 system log
start persistentLogging
以上注意事项:
If we need to start the logcat and collect all the log buffers after on post-fs-data/boot completed from init.rc you can use below code in init.rc file.
on property:dev.bootcomplete=1
start logging
on post-fs-data
start logging
service logging /system/bin/logcat -b all -v threadTime -f /data/directory_name/log -r 100000 -n 9
user system
group root system log
disabled