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

简介: 终端中查看某个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

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

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
5月前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
485 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
8月前
|
C++ Windows
【Function App】本地通过VS Code调试Function时候遇见无法加载文件错误Microsoft.Extensions.Diagnostics.Abstractions
在使用 VS Code 调试 Azure Functions 时,执行 `func host start` 可能因版本冲突报错。错误信息显示 Rpc Initialization Service 启动失败,可能是由于缺少文件或组件导致。解决方法包括:1) 使用 npm 卸载并重新安装 Azure Functions Core Tools;2) 若问题未解决,重新下载安装包(如 func-cli-x64.msi)修复旧版本工具;3) 退出并重启 VS Code,重新加载项目即可恢复正常运行。参考资料链接提供了更多背景信息。
329 1
|
移动开发 开发框架 小程序
uni-app:demo&媒体文件&配置全局的变量(三)
uni-app 是一个使用 Vue.js 构建多平台应用的框架,支持微信小程序、支付宝小程序、H5 和 App 等平台。本文档介绍了 uni-app 的基本用法,包括登录示例、媒体文件处理、全局变量配置和 Vuex 状态管理的实现。通过这些示例,开发者可以快速上手并高效开发多平台应用。
337 0
|
Linux 开发工具 数据安全/隐私保护
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
这篇文章介绍了在CentOS 7系统中安装Docker时遇到的两个常见问题及其解决方法:用户不在sudoers文件中导致权限不足,以及yum被锁定的问题。
302 2
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
|
Java Windows 容器
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
289 4
|
JSON Linux 网络安全
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
176 1
|
Java Go Windows
【应用服务 App Service】App Service中上传文件/图片(> 2M)后就出现500错误(Maximum request length exceeded).
【应用服务 App Service】App Service中上传文件/图片(> 2M)后就出现500错误(Maximum request length exceeded).
236 1
|
API 网络架构
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
204 0
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
|
缓存 Android开发 Kotlin
【安卓app开发】kotlin Jetpack Compose框架 | 先用OKhttp下载远程音频文件再使用ExoPlayer播放
使用 Kotlin 的 Jetpack Compose 开发安卓应用时,可以结合 OkHttp 下载远程音频文件和 ExoPlayer 进行播放。在 `build.gradle` 添加相关依赖后,示例代码展示了如何下载音频并用 ExoPlayer 播放。代码包括添加依赖、下载文件、播放文件及简单的 Compose UI。注意,示例未包含完整错误处理和资源释放,实际应用需补充这些内容。

热门文章

最新文章