几种在shell命令行中过滤adb logcat输出的方法

几种在shell命令行中过滤adb logcat输出的方法

       我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率。本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法。

 

注:windows下命令    adb logcat | find “myapp”

 

       1、只显示需要的输出(白名单)

       最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配。简单的匹配一行当中的某个字符串,例如 MyApp:

       adb logcat | grep MyApp
       adb logcat | grep -i myapp #忽略大小写。
       adb logcat | grep --color=auto -i  myapp #设置匹配字符串颜色。更多设置请查看 grep 帮助。

       进阶一点可以使用 grep 的正则表达式匹配。例如上一个例子会匹配一行中任意位置的 MyApp,可以设置为仅匹配 tag。默认的 log 输出如下,如果修改过输出格式相应的表达式也要修改。

       I/CacheService(  665): Preparing DiskCache for all thumbnails.

       可以看出 tag 是一行开头的第三个字符开始,根据这点写出表达式:

       adb logcat | grep "^..MyApp"

       根据这个格式也可以设置只显示某个优先级的 log,再匹配行首第一个字符即可。例如仅显示 Error 级别 tag 为 MyApp 的输出:

       adb logcat | grep "^E.MyApp"

       当然也可以匹配多个,使用 | 分割多个匹配表达式,要加转义符。例如要匹配 tag 为 MyApp 和 MyActivity 的输出:

       adb logcat | grep "^..MyApp\|^..MyActivity"
       adb logcat | grep -E "^..MyApp|^..MyActivity"  #使用 egrep 无须转义符

       2、过滤不需要的输出(黑名单)

       还是使用 grep,用法也跟上面的一样,加一个 -v 即可。例如要过滤 tag 为 MyApp 和 MyActivity 的输出:

       adb logcat | grep -v "^..MyApp\|^..MyActivity"
       adb logcat | grep -vE "^..MyApp|^..MyActivity"  #使用 egrep 无须转义符

       3、显示同一个进程的所有输出

       有时一个程序里面的 tag 有多个,需要输出该程序(同一个 PID)的所有 tag;仅使用 tag 过滤有时也会漏掉一些错误信息,而一般错误信息也是和程序同一个 PID。还是通过 grep 实现,思路是先根据包名找到 pid 号,然后匹配 pid。写成 shell 脚本如下,参数是程序的 java 包名(如 com.android.media)。

       #!/bin/bash
       packageName=$1
       pid=`adb shell ps | grep $packageName | awk ‘{print $2}’`
       adb logcat | grep –color=auto $pid

       4、从当前开始显示

       logcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。

       adb logcat -c && adb logcat

       5、过滤 log 文件

       有时需要分析 log 文件,过滤 log 文件还是使用 grep。例如 log 文件为 myapp.log,要匹配 tag 为 MyApp 和 MyActivity 的输出,然后输出到 newmyapp.log:

       cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log

       Windows 下推荐使用Notepad++,一个免费强大的记事本,支持正则表达式查找替换。可以高亮显示匹配内容,也可以删除不需要的内容。

       以上的技巧主要用到了 grep,其实 logcat 本身也有过滤功能,可以根据 tag、优先级过滤 log,具体请参考 Android 官方文档Reading and Writing Logs。如果喜欢使用图形界面,请参考Using DDMS,DDMS 里面的 logcat 也可以同样过滤。

转载于:https://www.cnblogs.com/zhengah/p/4565624.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

duration java_Java Duration类| toHours()方法与示例

duration javaDuration Class toHours()方法 (Duration Class toHours() method) toHours() method is available in java.time package. toHours()方法在java.time包中可用。 toHours() method is used to convert this Duration into the number of hours. toHours()方法用于…

SpringBoot时间格式化的5种方法!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)在我们日常工作中,时间格式化是一件经常遇到的事儿,所以本文我们就来盘点一下 Spring Boot 中时间格…

C#文件加密和解密

下载 CSDN下载:https://download.csdn.net/download/myinc/9913318 Github:GitHub 如果没有积分,也可以关注我获取哟~【文件加密】 // * 最近看了一下加密算法,对加密文件突然很感兴趣,就研究了一下:…

zabbix server 迁移步骤

zabbix server 迁移步骤: 1.在新机器上安装同版本的zabbix server软件和zabbix agent软件。 2.同步zabbix_server.conf配置文件。 3.同步/usr/lib/zabbix/{alertscripts,externalscripts}里面的程序。 4.我们这里有安装使用oneproxy,需要同步oneproxy软件…

stl reserve_vector :: reserve()函数以及C ++ STL中的示例

stl reserveC vector :: reserve()函数 (C vector::reserve() function) vector::reserve() is a library function of "vector" header, which is used to request change in vector allocation. Refer to example to understand in details. vector :: reserve()是…

SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!

大家好,我是磊哥。今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常。首先我们来看看为什么要返回统一的标准格式?为什么要对SpringBoot返回统一的标准格式在默认情况下&#…

SysinternalsSuite工具

写在前面(下载) 下载地址 简介 sysinternals 的网站创立于1996年由Mark russinovich和布赖科格斯韦尔主办其先进的系统工具和技术资料微软于2006年7月收购sysinternals公司 . 不管你是一个IT高级工作者还是一个开发者,你都会发现sysintern…

zabbix企业应用之监控docker容器资源情况

关于docker的监控,无论开源的CAdvisor、Data Dog还是我自己写的监控(http://dl528888.blog.51cto.com/2382721/1635951),不是通过docker的stats api就是使用socket来进行。单独看一个主机的监控项还行,比如只查看容器t…

使用了synchronized,竟然还有线程安全问题!

线程安全问题一直是系统亘古不变的痛点。这不,最近在项目中发了一个错误使用线程同步的案例。表面上看已经使用了同步机制,一切岁月静好,但实际上线程同步却毫无作用。关于线程安全的问题,基本上就是在挖坑与填坑之间博弈&#xf…

序列图| 软件工程

什么是时序图? (What is Sequence Diagram?) Sequence Diagram is a "Connection Diagram" that represents a single structure or storyline executing in a system. It is the second most used UML diagram behind the class diagram. Sequence Diag…

终极解密输入网址按回车到底发生了什么?

详解输入网址点击回车,后台到底发生了什么。透析 HTTP 协议与 TCP 连接之间的千丝万缕的关系。掌握为何是三次握手四次挥手?time_wait 存在的意义是什么?全面图解重点问题,再也不用担心面试问这个问题。大致流程URL 解析&#xff…

unity, 相机空间 与 相机gameObject的局部空间

在unity里 相机空间 与 相机gameObject的局部空间 不重合。 Camera.worldToCameraMatrix的文档中有这样一句话: Note that camera space matches OpenGL convention: cameras forward is the negative Z axis. This is different from Unitys convention, where for…

Winform实现漂亮动画-小火车

一、起因 最近在做一个Winform的项目,其中需要一些加载动画,所以就搜索了一下找些思路,以下链接是本文的参考。 参考:Jeremie Martinez (译文链接) 注:原文中并没有给出图片资源,图…

julia在mac环境变量_在Julia中确定值/变量的类型

julia在mac环境变量To determine the type of value, variable – we use typeof() function, it accepts a value or a variable or a data type itself and returns the concrete type of the given parameter. 要确定值的类型,变量 –我们使用typeof()函数 &…

synchronized 加锁 this 和 class 的区别!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由…

不懂技术的人请不要对懂技术的人说这很容易

“这个网站相当简单,所有你需要做的就是完成X,Y,Z。你看起来应该是技术很好,所以,我相信,你不需要花费太多时间就能把它搭建起来。”我时不时的就会收到这样的Email。写这些邮件的人几乎都是跟技术不沾边的…

C# WinForm窗体四周阴影效果

一、起因 关于winform窗体无边框的问题很简单,只需要设置winform的窗体属性即可: FormBorderStyle FormBorderStyle.None; 但是这中无边框窗口实现的效果和背景完全没有层次的感觉,所以能加上阴影,突出窗口显示的感觉。 二、…

循环语句与条件语句_在PHP中混合条件语句和循环

循环语句与条件语句As mentioned earlier, the looping statement is executing a particular code as long as a condition is true. On the order hand, conditional statements are statements that can only be executed based on the fulfillment of a particular conditi…

synchronized 优化手段之锁膨胀机制!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)synchronized 在 JDK 1.5 之前性能是比较低的,在那时我们通常会选择使用 Lock 来替代 synchronized。然而这个情…

Mac下显示隐藏文件

苹果Mac OS X操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在Mac终端输入命令。显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowA…