终端中查看某个app的logcat输出,支持关键字筛选,支持输出到文件

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 终端中查看某个app的logcat输出,支持关键字筛选,支持输出到文件

在只安装了adb环境的情况下,如何查看某个app的日志,同时筛选关键字?

如何配置adb环境,请移步mac下安装adb环境的三种方式

通过adb在终端中输出app的实时log

Logcat命令行工具

Logcat 是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用使用 Log 类写入的消息。

在 Android Studio 中,您也可以从 Logcat 窗口查看日志消息。这里我们通过Logcat命令行工具来查看app输出的log。

连接设备

先将设备通过usb数据线连接到电脑,通过adb devices命令查看是否连接成功:

 $ adb devices
List of devices attached
e253ab4c    device

可以看到我的手机已经连接到adb了。

查看设备的所有logcat输出

在终端中输入adb logcat,即可以看到设备的所有logcat输出:

adb logcat -d

不过这明显不是我们想要的,我们需要的是某个app下的logcat输出,Logcat命令行工具中提供了相应的方式:

在这里插入图片描述

adb logcat -d --pid=xxx

这里的xxx表示我们目标app对应的pid

获取某个app的pid:

如何获取某个app对应的pid呢?

通过adb shell dumpsys 包名

可以通过adb shell dumpsys 包名获取pid,不过需要我们在手机上先打开这个app,因为pid是分配给进程的,进程启动以后才会分配pid。

$ adb shell dumpsys meminfo com.tinytongtong.androidstudy
Applications Memory Usage (in Kilobytes):
Uptime: 96780621 Realtime: 118699597

** MEMINFO in pid 7948 [com.tinytongtong.androidstudy] **
                   Pss  Private  Private  SwapPss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    13692    13608       20       29    22528    20066     2461
  Dalvik Heap     2645     2584       28       19    15183     2895    12288
 Dalvik Other     2272     2260       12        0
        Stack       60       60        0        0
       Ashmem      166      164        0        0
      Gfx dev      780      780        0        0
    Other dev       34        0       32        0
     .so mmap     9038       68     4892        4
    .jar mmap     5295        0     2344        0
    .apk mmap    22072      192    18124        0
    .ttf mmap     3043        0     1832        0
    .dex mmap    15582       20    14636        0
    .oat mmap       94        0       20        0
    .art mmap     6384     5888      128       18
   Other mmap     1631       68     1352        0
   EGL mtrack    30624    30624        0        0
    GL mtrack     6068     6068        0        0
      Unknown     1814     1760       20        1
        TOTAL   121365    64144    43440       71    37711    22961    14749

 App Summary
                       Pss(KB)
                        ------
           Java Heap:     8600
         Native Heap:    13608
                Code:    42128
               Stack:       60
            Graphics:    37472
       Private Other:     5716
              System:    13781

               TOTAL:   121365       TOTAL SWAP PSS:       71

 Objects
               Views:       45         ViewRootImpl:        1
         AppContexts:        5           Activities:        1
              Assets:       15        AssetManagers:        0
       Local Binders:       32        Proxy Binders:       43
       Parcel memory:       11         Parcel count:       42
    Death Recipients:        4      OpenSSL Sockets:        1
            WebViews:        0

 SQL
         MEMORY_USED:      511
  PAGECACHE_OVERFLOW:       75          MALLOC_SIZE:      117

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       32             22         0/23/2  /data/user/0/com.tinytongtong.androidstudy/databases/dokit-database
         4       12                         0/0/0    (attached) temp
         4       32             40         2/14/2  /data/user/0/com.tinytongtong.androidstudy/databases/dokit-database (2)
         4       32             40         1/15/2  /data/user/0/com.tinytongtong.androidstudy/databases/dokit-database (3)

在最上面的输出中,我们也可以很方便的看到pid:

MEMINFO in pid 7948

需要注意的是,pid是分配给进程的,如果app关闭了再重新打开,就会分配一个新的进程,同一个包名对应的pid就会变

通过adb shell dumpsys activity top | grep "ACTIVITY" -A 0

除了上面的方式,我们还有另一种方式,也需要app处于打开状态:

¥ adb shell dumpsys activity top | grep "ACTIVITY" -A 0
  ACTIVITY com.bbk.launcher2/.Launcher 2afc762 pid=3207
  ACTIVITY com.tinytongtong.androidstudy/.MainActivity 45d30ec pid=7948

可以清晰的看到我们目标包名com.tinytongtong.androidstudy的pid为7948

输出单个app的log:adb logcat -d --pid=xxx

接着使用我们获取到的pid,就可以输出目标app下的log了:

adb logcat -d --pid=7948

这里输出的logcat是app下所有的log,如果我们要定位具体问题还是远远不够的,还需要支持关键字筛选。

删选关键字:grep

接着我们借助grep命令进行筛选,比如说我要搜索的关键字是"Lifecycle":

$ adb logcat -d --pid=7948 | grep "Lifecycle"
09-23 12:49:09.169  7948  7948 E LifecycleAActivity: onCreate
09-23 12:49:09.195  7948  7948 E LifecycleAActivity: onStart
...

可以看到这里只输出了符合我关键字的log,任务基本完成。

输出到对应的文件中: xxx命令 > target.txt

当然了,如果想把输出结果保存到文件中,也是很方便的,在之前的命令后面添加 > logcat.txt,之前命令的输出结果就会被重定向到logcat.txt文件中。

adb logcat --pid=7948 -d | grep "Lifecycle" > logcat.txt

我们查看通过cat logcat.txt即可快速查看logcat.txt中的内容。

cat logcat.txt

这里的>表示覆盖文件内容,如果要追加文件末尾,可以换成>>

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
2月前
|
移动开发 开发框架 小程序
uni-app:demo&媒体文件&配置全局的变量(三)
uni-app 是一个使用 Vue.js 构建多平台应用的框架,支持微信小程序、支付宝小程序、H5 和 App 等平台。本文档介绍了 uni-app 的基本用法,包括登录示例、媒体文件处理、全局变量配置和 Vuex 状态管理的实现。通过这些示例,开发者可以快速上手并高效开发多平台应用。
|
2月前
|
Linux 开发工具 数据安全/隐私保护
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
这篇文章介绍了在CentOS 7系统中安装Docker时遇到的两个常见问题及其解决方法:用户不在sudoers文件中导致权限不足,以及yum被锁定的问题。
40 2
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
|
4月前
|
JSON Linux 网络安全
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
|
4月前
|
Java Windows 容器
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
|
4月前
|
API 网络架构
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
|
4月前
|
Java Go Windows
【应用服务 App Service】App Service中上传文件/图片(> 2M)后就出现500错误(Maximum request length exceeded).
【应用服务 App Service】App Service中上传文件/图片(> 2M)后就出现500错误(Maximum request length exceeded).
|
4月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
4月前
|
Java Linux 网络安全
【Azure 应用服务】App Service for Linux环境中,如何解决字体文件缺失的情况
【Azure 应用服务】App Service for Linux环境中,如何解决字体文件缺失的情况
|
4月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
4月前
|
Web App开发 开发者
【Azure 应用服务】App Service 进入后台管理(Kudu)页面,因为文件过多而显示不全的问题
【Azure 应用服务】App Service 进入后台管理(Kudu)页面,因为文件过多而显示不全的问题

热门文章

最新文章