Android存储关闭日志在哪里?

我知道可以通过ADB拉出kmsgdmesg内容来获取启动日志。
但我不知道如何在Android中检索关机日志,因为Android中没有/var文件夹(大多数桌面Linux发行版通常存储其关机日志的地方)。

那么如何在Android中获取关机日志?

查看以下某些位置:

 /proc/last_kmsg /data/tombstones/ /data/dontpanic/ /data/system/dropbox/ 

(这个列表不是严格的内核日志,包括框架和应用程序日志,有时也有兴趣)

我发现在Android中收集关机日志的一个方法是在主机PC上运行adb pull /proc/kmsg C:\Logs.txt ,然后关闭设备。 您将获取日志,直到主机和设备之间的USB通信快照! 我知道这只是众多关机场景中的一例,但我没有find其他案例的满意答案!

TL; DR
通过adb运行命令,将logcat和proc / kmsg复制到文件并使其保持运行,即使adb与nohupdisownsetsid断开连接也是如此。 可能需要busybox,也需要root和adb root。
setsid cat proc/kmsg > /sdcard/kmsg.txt &

logcat -v long -f /sdcard/logcat.txt (不知何故只能在没有setsid情况下工作)

或者将常规复制命令添加到某些启动脚本 。
/ TL; DR

您可以不断地将proc/kmsglogcat复制到Android设备或microSD卡上的文件中,以便在adb断开连接后获取日志。

您需要root访问权限和adb root权限才能使用此权限。 对于后者,如果您有自定义ROM或adbd insecure应用程序 ,请使用开发人员选项中的设置。

使用adb shell获取android shell后,输入su以获取超级用户访问权限。

然后,您不仅需要在命令后放置&符号( & ),还要确保在adb断开连接后该命令继续运行。 这是由nohupdisownsetsid (请参阅此处了解用法)。
如果由于您没有这些命令而无效,则需要安装busybox 。
在这里看到我的问题。

请参阅此处了解如何获取logcat和内核日志并将其打印到某个文件或合并它。 有关logcat命令的参数,请参阅developer.android.com/tools/help/logcat.html。

最后,您可以使用setsid cat proc/kmsg > /sdcard/kmsg.txt &等命令来获取内核消息。

对于logcat,您可以使用以下命令之一: logcat -v long -f /sdcard/logcat.txtlogcat -v long > /sdcard/logcat.txt

我不知道为什么,但有时它不能与setsid工作,只是没有连续复制但在执行命令后不久就停止了。 在这些情况下,它也会在进入jobs ,否则就不会出现。 然后它只是没有setsid ,它在断开连接和重新连接后仍然存活。 我想你必须尝试文件不断变大。 如果有人弄明白为什么它表现得像是……让我知道,我会编辑答案。

将命令添加到启动脚本可能也是一些解决方案。

希望这可以帮助。

fightcookie