安卓系统关机日志存储在哪里?

12

我知道可以通过使用ADB提取kmsgdmesg的内容来获得启动日志。
但是,由于Android中没有/var文件夹(大多数桌面Linux发行版通常存储它们的关机日志的位置),所以我不知道如何检索Android中的关机日志。

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

6个回答

12

可以在以下位置中查找:

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

(此列表不仅限于内核日志,还包括框架和应用程序日志,这些日志有时也很有用)


谢谢你的回复,Chris!我在手机上查找了这些位置。我找不到/proc/last_kmsg和/data/tombstones/。而且,在/data/dontpanic上执行“ls”没有返回任何内容!!我在/data/system/dropbox/中有一些运气,因为它们包含像SYSTEM_BOOT@915149630014.txtsystem_app_strictmode@915149633098.txt.gz这样的文件。它们具有一些应用程序级别的信息。但是,它们都没有我们从kmsg获取的信息:( - Pavan Manjunath
1
你在 /data/system/dropbox 没有类似 SYSTEM_LAST_KMSG@xxx.txt.gz 这样的文件吗?这可能不是标准功能...不幸的是。 - Chris Stratton
不,Chris!没有任何类似 LAST_KMSG 的文件!!无论如何,非常感谢你的帮助!如果你找到其他线索,请回复我,我仍在追踪 Android 的关机日志!! - Pavan Manjunath

4

TL;DR:
通过adb运行命令,将logcat和proc/kmsg复制到文件中,并使用nohupdisownsetsid保持运行,即使adb断开连接。可能需要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或不安全应用程序,请在开发者选项中使用该设置。
在使用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

3

新款手机不再使用这些位置,所以如果你正在阅读本文,那么从现在开始

内核崩溃日志现在位于/sys/fs/pstore而不是/proc/last_kmsg中。


3

我发现在Android中收集关机日志的一个方法是在主机PC上运行adb pull /proc/kmsg C:\Logs.txt,然后关闭设备。您将获得日志,直到主机和设备之间的USB通信被断开!我知道这只是众多关机情况中的一种,但对其他情况我没有找到令人满意的答案!


很不幸,你永远不知道你该死的手机什么时候会像我的手机一样自动关机。它认为35%的电量太低了,所以即使重新启动后也会自动关机。有时候甚至要等到10%才会关机。该死的安卓系统。 - TheRealChx101

3
getprop还有一个sys.boot.reason.last,它包含了Android设备的最后一次重启的基本信息:上次重启
adb shell getprop | grep -A3 boot.reason 
[persist.sys.boot.reason]: []
[persist.sys.boot.reason.history]: [watchdog,1692290965
reboot,userrequested,1692249163
watchdog,1691516754
watchdog,1691078769]
--
[sys.boot.reason]: [watchdog]
[sys.boot.reason.last]: [watchdog]
[sys.boot_completed]: [1]
[sys.bootstat.first_boot_completed]: [1]
[sys.fuse.transcode_enabled]: [true]


0

我也曾经在寻找同样的答案,最终我找到了!

在 Android 8 中,所有的日志都位于 \data\log\android_logs\...,包括应用程序和内核日志。内核日志被称为 kmsgcat-log_timestamp_.gz

编辑:虽然这是一个非常古老的帖子,但我认为这个答案可能会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接