Android 源码 logtags 的位置:
~/work/gdev/frameworks$ find -type f -name *.logtags
./base/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags
./base/packages/SettingsProvider/src/com/android/providers/settings/EventLogTags.logtags
./base/services/core/java/com/android/server/EventLogTags.logtags
./base/services/core/java/com/android/server/am/EventLogTags.logtags
./base/core/java/com/android/internal/logging/EventLogTags.logtags
./base/core/java/android/speech/tts/EventLogTags.logtags
./base/core/java/android/webkit/EventLogTags.logtags
./base/core/java/android/content/EventLogTags.logtags
./ex/common/java/com/android/common/GoogleLogTags.logtags
./native/services/surfaceflinger/EventLog/EventLogTags.logtags
./opt/telephony/src/java/com/android/internal/telephony/EventLogTags.logtags
关于 EventLog 的处理代码:
~/work/gdev/frameworks$ find -type f -name EventLog*.java
./base/packages/SystemUI/src/com/android/systemui/EventLogConstants.java
./base/core/java/android/speech/tts/EventLoggerV1.java
./base/core/java/android/util/EventLog.java
./base/core/java/android/util/EventLogTags.java
在 EventLog.java 第一行就定义了 tags 文件位置:
private static final String TAGS_FILE = "/system/etc/event-log-tags";
文件开头有一段注释:
/**
* Access to the system diagnostic event record. System diagnostic events are
* used to record certain system-level events (such as garbage collection,
* activity manager state, system watchdogs, and other low level activity),
* which may be automatically collected and analyzed during system development.
*
* <p>This is <b>not</b> the main "logcat" debugging log ({@link android.util.Log})!
* These diagnostic events are for system integrators, not application authors.
*
* <p>Events use integer tag codes corresponding to /system/etc/event-log-tags.
* They carry a payload of one or more int, long, or String values. The
* event-log-tags file defines the payload contents for each type code.
*/
可以查找 EventLog 字符串来寻找 EventLog 的调用地方,比如 frameworks/base/core/java/android/app/ActivityThread.java:
public final class ActivityThread {
............
private static final int LOG_AM_ON_PAUSE_CALLED = 30021;
private static final int LOG_AM_ON_RESUME_CALLED = 30022;
........................
final Bundle performPauseActivity(ActivityClientRecord r, boolean finished,
boolean saveState) {
..............
mInstrumentation.callActivityOnPause(r.activity);
EventLog.writeEvent(LOG_AM_ON_PAUSE_CALLED, UserHandle.myUserId(),
r.activity.getComponentName().getClassName());
.................
}
EventLog 根据 "/system/etc/event-log-tags" 定义的对应关系写入 logcat, 比如 LOG_AM_ON_PAUSE_CALLED 30022 对应的是。
p15v57c2k:/ # cat /system/etc/event-log-tags | grep 30022
30022 am_on_resume_called (User|1|5),(Component Name|3),(Reason|3)
在 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java 找到 EventLogTags.writeAmMeminfo。
但是这个 EventLogTags 类是编译时生成的:
out/target/common/obj/JAVA_LIBRARIES/services_intermediates/src/core/java/com/android/server/am/EventLogTags.java