ProtoLog动态日志


1.简介

ProtoLog是从Android R开始引入的日志框架,使用此框架,我们可以对指定类别的日志进行动态的开启或暂停。目前,主要是wm相关的动态日志。

2.如何开启ProtoLog

~$ adb shell wm logging --help
Unknown command
Window manager logging options:
  start: Start proto logging //开启proto logging
  stop: Stop proto logging//暂停proto logging
  enable [group...]: Enable proto logging for given groups//为给定groups启用proto日志记录
  disable [group...]: Disable proto logging for given groups///为给定groups禁用proto日志记录
  enable-text [group...]: Enable logcat logging for given groups//为给定groups启用 logcat 日志记录
  disable-text [group...]: Disable logcat logging for given groups//为给定groups禁用 logcat 日志记录

通过adb shell wm logging --help可以看出,有三种方式启用/禁用proto log,下面分别对这三种方式进行举例说明:

2.1、start/stop

adb shell wm logging start可以收集所有的proto日志:

:~$ adb shell wm logging start//开始收集proto日志
Start logging to /data/misc/wmtrace/wm_log.pb.
:~$ adb shell wm logging stop//停止收集proto日志
Stop logging to /data/misc/wmtrace/wm_log.pb. Waiting for log to flush.
Log written to /data/misc/wmtrace/wm_log.pb.

可以看到当使用命令开始收集日志,操作设备后,停止收集,会在/data/misc/wmtrace/目录下生成一个wm_log.pb文件,

可以通过file:///home/mi/winscope.html来查看wm_log.pb文件:

将wm_log.pb文件上传到网址然后点击“submit”就可以查看log了

2.2、enable/disable group

为给定group启用proto log收集。首先来看如何确认group

可以通过两种方式来确认group:

第一种:源码方式

可以通过ProtoLogGroup.java里定义的group确认

frameworks/base/services/core/java/com/android/server/wm/ProtoLogGroup.java

public enum ProtoLogGroup implements IProtoLogGroup {
    WM_ERROR(true, true, true, Consts.TAG_WM),
    WM_DEBUG_ORIENTATION(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
            Consts.TAG_WM),
    WM_DEBUG_FOCUS_LIGHT(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
            Consts.TAG_WM),
    WM_DEBUG_BOOT(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
            Consts.TAG_WM),
    WM_DEBUG_RESIZE(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
            Consts.TAG_WM),
......

对应的WM_ERROR、WM_DEBUG_ORIENTATION就是group

第二种:通过json文件确认

在设备中的/system/etc/目录下有个protolog.conf.json.gz文件,解压后得到protolog.conf.json文件

{
  "version": "1.0.0",
  "messages": {
    "-2146181682": {
      "message": "Releasing screen wakelock, obscured by %s",
      "level": "DEBUG",
      "group": "WM_DEBUG_KEEP_SCREEN_ON",
      "at": "com\/android\/server\/wm\/WindowManagerService.java"
    },
    "-2127842445": {
      "message": "Clearing startingData for token=%s",
      "level": "VERBOSE",
      "group": "WM_DEBUG_STARTING_WINDOW",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
    "-2109936758": {
      "message": "removeAppToken make exiting: %s",
      "level": "VERBOSE",
      "group": "WM_DEBUG_ADD_REMOVE",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
......

可以得到对应的group组值。

继续看enable/disable命令

~$ adb shell wm logging enable WM_DEBUG_ADD_REMOVE
:~$ adb shell wm logging start
Start logging to /data/misc/wmtrace/wm_log.pb.
:~$ adb shell wm logging stop
Stop logging to /data/misc/wmtrace/wm_log.pb. Waiting for log to flush.
Log written to /data/misc/wmtrace/wm_log.pb.
:~$ adb pull /data/misc/wmtrace/wm_log.pb
776 KB/s (75531 bytes in 0.094s)

使用enable命令启用proto log时,还需要通过start命令将log输出到wm_log.pd文件中。

2.3、enable/diable-text

使用此命令可以把proto log通过logcat输出,启用proto log

~$ adb shell wm logging enable-text WM_DEBUG_ADD_REMOVE

操作设备时,可以通过adb logcat 查看日志,具体的日志tag及关键字信息可以通过protolog.conf.json.gz文件查看,下面是一个启用WM_DEBUG_ADD_REMOVE组之后打印的日志实例:

//日志级别   日志tag  日志message
V WindowManager: No longer Stopped: ActivityRecord{xxxxxx}
V WindowManager: notifyAppResumed: wasStopped=true ActivityRecord{xxxxxx}
V WindowManager: No longer Stopped: ActivityRecord{xxxxxx}
D WindowManager: finishDrawingWindow: Window{xxxxxx} mDrawState=DRAW_PENDING
V WindowManager: removeIfPossible: Window{xxxxxx} callers=xxxxxx> 
V WindowManager: postWindowRemoveCleanupLocked: Window{xxxxxx}
V WindowManager: removeAppToken: ActivityRecord{xxxxxx}} delayed=false Callers=xxxxxx

最后,通过disable-text命令禁用日志

:~$ adb shell wm logging disable-text WM_DEBUG_ADD_REMOVE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值