not*_*bit 5 c++ java android buffer logcat
按照标准,Android logcat系统有4种不同的环形缓冲区:
main
system
radio
events
# and alias & groups:
all -- all available logs
default -- main
crash -- n/a
Run Code Online (Sandbox Code Playgroud)
但是,在AOS 6+上似乎还有其他缓冲区:
# logcat --help
...
-b <buffer> Request alternate ring buffer, 'main', 'system', 'radio',
'events', 'crash' or 'all'. Multiple -b parameters are
allowed and results are interleaved. The default is
-b main -b system -b crash.
...
Run Code Online (Sandbox Code Playgroud)
和android logcat.cpp源代码,似乎暗示还有其他的,如:
security
kernel
Run Code Online (Sandbox Code Playgroud)
通常在java应用程序中,将消息放入mainlogcat的方法是使用:Log.i(TAG, msg).
所以问题是: Android如何确定用于各种logcat消息的缓冲区?
(特别感谢AOS源代码的具体参考.)
然后一个自然的后续问题是,你如何看到或启用其他隐藏的缓冲区?
我不喜欢回答我自己的问题,但我找到了一些答案,还有一些非常好的笔记。
首先,各种与日志相关的 (Java) 源文件位于: platform_frameworks_base/core/java/android/util/和: platform_frameworks_base/telephony/java/android/telephony/。
EventLog.java # EVENT Log: These diagnostic events are for system integrators, not application authors.
Log.java # MAIN Log: Where user app logcat goes from: Log.v() Log.d() Log.i() Log.w() and Log.e()
Slog.java # SYSTEM Log: Primarily for use by coding running within the system process.
Rlog.java # RADIO Log: All radio, wifi, bluetooth etc. related logs. Also scrubs personal info from appearing in logs.
Run Code Online (Sandbox Code Playgroud)
与相关文件:
EventLogTags.java # Deprecated! (Use EventLog)
LocalLog.java # log(), dump(), reverseDump(), ReadOnlyLocalLog()
LogPrinter.java # decides what buffer to print to: LOG_ID_<buffer_name>
LogWriter.java # decides priority and TAG
TimingLogger.java # A utility class to help log timings splits throughout a method call.
Run Code Online (Sandbox Code Playgroud)
日志缓冲区在Log.java 中通过以下方式标识:
public static final int LOG_ID_MAIN = 0;
public static final int LOG_ID_RADIO = 1;
public static final int LOG_ID_EVENTS = 2;
public static final int LOG_ID_SYSTEM = 3;
public static final int LOG_ID_CRASH = 4;
Run Code Online (Sandbox Code Playgroud)
在操作系统中,日志记录由以下属性控制:
setprop log.tag.<YOUR_LOG_TAG> <LEVEL>
并在文件中/data/local.prop:
log.tag.<YOUR_LOG_TAG>=<LEVEL>
此外,我发现了有趣的评论。
该主日志:
就详细程度而言,从最少到最多的顺序是 ERROR、WARN、INFO、DEBUG、VERBOSE。除非在开发期间,否则永远不应将 Verbose 编译到应用程序中。调试日志被编译但在运行时被剥离。错误、警告和信息日志始终保留。
提示:不要忘记,当您拨打电话时
Log.v(TAG, "index=" + i);当您构建要传递到 Log.d 的字符串时,编译器使用 StringBuilder 并且至少发生三个分配:StringBuilder 本身、缓冲区和 String 对象。实际上,还有另外一个缓冲区分配和复制,对gc 的压力更大。这意味着如果您的日志消息被过滤掉,您可能正在做大量工作并产生大量开销。
该事件日志:
访问系统诊断事件记录。系统诊断事件用于记录某些系统级事件(例如垃圾收集、活动管理器状态、系统看门狗和其他低级活动),这些事件可以在系统开发过程中自动收集和分析。
这不是主要的“logcat”调试日志({@link android.util.Log})!这些诊断事件适用于系统集成商,而不是应用程序作者。
事件使用对应于 /system/etc/event-log-tags 的整数标签代码。它们携带一个或多个 int、long 或 String 值的负载。event-log-tags 文件定义了每个类型代码的负载内容。
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |