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

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

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

如何配置adb环境,请移步[mac下安装adb环境的三种方式
](https://blog.csdn.net/qq_26287435/article/details/120433352)

通过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

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

相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
6天前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
96 0
|
6天前
|
JavaScript
uni-app中关于格式化时间的js文件
uni-app中关于格式化时间的js文件
40 0
|
6天前
|
JavaScript Android开发
【问题篇】打包Vue-cli3创建的vue项目成App的apk文件
【问题篇】打包Vue-cli3创建的vue项目成App的apk文件
34 0
|
6月前
mpvue踩坑-未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
mpvue踩坑-未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
41 0
|
6天前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
188 0
|
7月前
|
JavaScript
Angular 应用里 server.ts 文件的 APP_BASE_HREF token 的用法?
Angular 应用里 server.ts 文件的 APP_BASE_HREF token 的用法?
54 0
|
2天前
|
Web App开发 JSON 小程序
苹果app开发apple-app-site-association文件配置
apple-app-site-association 是苹果的配置文件,用于建立app和网站关联,支持Universal Links,使点击网站链接能直接打开相应app内部页面。配置文件为JSON格式,需上传至服务器`.well-known`目录或根目录。通过检查三个链接来测试配置,确保Content-Type为`application/json`。成功配置后,点击链接能在iPhone备忘录或Safari中直接唤起app,但可能有24-48小时延迟。
21 6
|
6天前
|
iOS开发 开发者
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
|
6天前
|
开发框架 前端开发 算法
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
47 0
|
6天前
|
监控 安全 物联网
B/S架构智慧工地源码,两个终端:PC后台管理端、APP移动端
智慧工地系统充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术,以PC端,移动端,设备端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳务、设备、物料、安全、环境、能源、资料、计划、质量、视频监控等十大管理环节变得智慧可控。为建设集团、施工企业、政府监管部门等提供一站式工地现场管理信息化解决方案,是一种崭新的工程现场一体化管理模式。
41 0