关于Android Logcat在真实设备中

时间:2013-09-14 05:12:37

标签: android logcat android-logcat

我有一些与Android Logcat相关的问题,我将这些问题引用到REAL DEVICE而不是模拟器:

1) 我有一个程序,它有很多Log.d(或其他类似的日志功能),我做了一些谷歌搜索,发现那些日志将输出到循环的64K缓冲区。我的问题是,那些64K缓冲区位于何处?它位于RAM还是文件系统中?我的应用退出后会被删除吗?

2) 我谷歌发现,日志将输出到一个名为“/ dev / event”的文件(不确定),但我看不到任何与应用程序相关的日志记录,为什么?只能看到与系统相关的日志。

3) 每个应用都将其日志输出到不同的日志文件吗?或者它们都被转储到同一个日志文件中?在这种情况下,我们如何分离日志?

4) 如果日志记录缓冲区是64K,我们如何增加它?如果我们想将日志重定向到sd卡中的文件,我们如何限制文件大小(当然也使它成为循环)?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

逐点指出:

(1)日志缓冲区位于内核中的RAM中。日志记录由内核驱动程序处理。在最近的设备上,日志缓冲区远大于64KB。它们在应用程序退出时不会丢失,但在设备重启后无法生存。

(2)设备条目位于/dev/log,例如主日志为/dev/log/main,无线电日志为/dev/log/radio,事件日志为/dev/log/events。日志的格式通常比您在logcat中看到的更紧凑,因此使用cat之类的内容直接读取它们可能会让人感到困惑。

(3)所有应用程序都写入相同的日志设备。每条日志消息都标记有日志编写器的进程ID和线程ID,因此您可以将它们分开。 (logcat -v threadtime会显示pid,tid,时间戳和标记。)

(4)您需要更改驱动程序中的值以更改日志的大小。同样,最近的设备具有更大的日志缓冲区,因此这可能不太有用。您可以将输出发送到logcat的文件;如果你想做某种循环缓冲区,你需要捕获logcat的输出并自己处理它。 (您也可以直接读取日志设备,但我认为API不公开。请参阅AOSP logcat源。)

Android的最新版本不允许应用读取日志中的所有条目。相反,应用程序可能只读取他们自己生成的条目。这样做是为了允许错误报告系统捕获日志,同时防止任意应用程序“窥探”其他应用程序。当您从logcat运行adb shell时,它会以shell用户身份运行,该用户有权读取所有日志。