我不喜欢回答自己的问题,但我找到了一些答案,还有一些非常好的笔记。
首先,各种与日志相关的(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.
与相关文件:
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.
日志缓冲区在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;
在操作系统中,日志记录由属性控制:
setprop log.tag.<YOUR_LOG_TAG> <LEVEL>
并在文件 /data/local.prop 中:
log.tag.<YOUR_LOG_TAG>=<LEVEL>
此外,我发现了有趣的 cmets。
MAIN 日志:
详细程度从少到多的顺序是
错误、警告、信息、调试、详细。永远不应该编译详细
到应用程序中,开发期间除外。编译调试日志
in 但在运行时被剥离。始终保留错误、警告和信息日志。
提示:当你打电话时不要忘记
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 文件定义了每种类型代码的有效负载内容。