app测试日志如何获取,logcat值得拥有
目录
Logcat是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用中使用 Log 类写入的消息。
1、命令行语法
要通过 adb shell 运行 Logcat,一般用法如下:
[adb] logcat [<option>] ... [<filter-spec>] ...
您可以将 logcat 作为 adb 命令运行,也可以直接在模拟器或关联设备的 shell 提示中运行。
要使用 adb 查看日志输出,请转到您的 SDK platform-tools/ 目录并执行以下命令:
adb logcat
要获取 logcat 在线帮助,请启动设备,然后执行以下命令:
adb logcat --help
您可以建立与设备的 shell 连接并执行以下命令:
adb shell
logcat
2、选项
下面介绍了logcat的命令行选项:
-
-b:加载可供查看的备用日志缓冲区
例如events或radio。默认使用 main、system 和 crash 缓冲区集。请参阅查看备用日志缓冲区
-
-c, –clear:清除(清空)所选的缓冲区并退出
默认缓冲区集为main、system和crash。要清除所有缓冲区,请使用-b all -c。
-
-e , –regex=:只输出日志消息与匹配的行,其中是一个正则表达式
-
-m , –max-count=:输出行后退出。这样是为了与–regex配对,但可以独立运行
-
–print:与–regex和–max-count配对,使内容绕过正则表达式过滤器,但仍能够在获得适当数量的匹配时停止
-
-d:将日志转储到屏幕并退出
-
-f :将日志消息输出写入
默认值为stdout
-
-g, –buffer-size:输出指定日志缓冲区的大小并退出
-
-n:将轮替日志的数量上限设置为 默认值为4
需要使用 -r 选项
-
-r:每输出时轮替日志文件
默认值为16。需要使用-f选项
-
-s:相当于过滤器表达式‘*:S’;它将所有标记的优先级设为“静默”,并用于放在可添加内容的过滤器表达式列表之前
-
-v:设置日志消息的输出格式。
默认格式为threadtime。
-
-D, –dividers:输出各个日志缓冲区之间的分隔线
-
-c:清空(清除)整个日志并退出
-
-t:仅输出最新的行数。此选项包括-d功能
3、过滤日志输出
1、日志消息的标记是一个简短的字符串,指示消息所源自的系统组件(例如,“View”表示视图系统)。
2、优先级是以下字符值之一(按照从最低到最高优先级的顺序排列):
-
V:详细(最低优先级)
-
D:调试
-
I:信息
-
W:警告
-
E:错误
-
F:严重错误
-
S:静默(最高优先级,绝不会输出任何内容)
通过运行 Logcat 并观察每条消息的前两列,您可以获取系统中使用的带有优先级的标记列表,格式为 /
以下是使用 logcat -v brief output 命令获取的简短 Logcat 输出的示例,它表明消息与优先级“I”和标记“ActivityManager”相关:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
要将日志输出降低到可管理的水平,您可以使用过滤器表达式限制日志输出。通过过滤器表达式,您可以向系统指明您感兴趣的标记/优先级组合,系统会针对指定的标记抑制其他消息。
过滤器表达式采用 tag:priority … 格式:
-
tag指示您感兴趣的标记
-
priority指示可针对该标记报告的最低优先级
不低于指定优先级的标记的消息会写入日志。您可以在一个过滤器表达式中提供任意数量的 tag:priority 规范。一系列规范使用空格分隔。
以下是一个过滤器表达式的示例,该表达式会抑制除标记为“ActivityManager”、优先级不低于“信息”的日志消息,以及标记为“MyApp”、优先级不低于“调试”的日志消息以外的所有其他日志消息。
adb logcat ActivityManager:I MyApp:D *:S
上述表达式中最后一个元素 *:S 将所有标记的优先级设为“静默”,从而确保系统仅显示标记为“ActivityManager”和“MyApp”的日志消息。
使用 *:S 是确保日志输出受限于您已明确指定的过滤器的绝佳方式,它可以让过滤器充当日志输出的“白名单”。
以下过滤器表达式显示了优先级不低于“警告”的所有标记的所有日志消息:
adb logcat *:W
如果您从开发计算机运行 Logcat(相对于在远程 adb shell 上运行),则也可以通过导出环境变量 ANDROID_LOG_TAGS 的值设置默认过滤器表达式:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
4、 控制日志输出格式
除标记和优先级外,日志消息还包含许多元数据字段。您可以修改消息的输出格式,以便它们显示特定的元数据字段。为此,您可以使用 -v 选项,并指定下列某一受支持的输出格式。
-
brief:显示优先级、标记以及发出消息的进程的 PID
-
long:显示所有元数据字段,并使用空白行分隔消息
-
process:仅显示 PID
-
raw:显示不包含其他元数据字段的原始日志消息
-
tag:仅显示优先级和标记
-
thread:旧版格式,显示优先级、PID 以及发出消息的线程的 TID
-
threadtime(默认值):显示日期、调用时间、优先级、标记、PID 以及发出消息的线程的 TID
-
time:显示日期、调用时间、优先级、标记以及发出消息的进程的 PID
启动 Logcat 时,您可以使用 -v 选项指定所需的输出格式:
[adb] logcat [-v <format>]
以下示例显示了如何生成输出格式为 thread 的消息:
adb logcat -v thread
请注意,您只能使用 -v 选项指定一种输出格式,但可以指定任意数量的有意义的修饰符。Logcat 会忽略没有意义的修饰符。
5、格式修饰符
格式修饰符依据以下一个或多个修饰符的任意组合更改 Logcat 输出。
要指定格式修饰符,请使用 -v 选项,如下所示:
adb logcat -b all -v color -d
每个 Android 日志消息都有一个与之相关联的标记和优先级。您可以将任何格式修饰符与以下任一格式选项进行组合:brief、long、process、raw、tag、thread、threadtime 和 time。
您可以通过在命令行中输入 logcat -v –help 获取格式修饰符详细信息:
-
color:使用不同的颜色来显示每个优先级。
-
descriptive:显示日志缓冲区事件说明。
此修饰符仅影响事件日志缓冲区消息,不会对其他非二进制文件缓冲区产生任何影响。事件说明取自 event-log-tags 数据库。
-
epoch:显示自 1970 年 1 月 1 日以来的时间(以秒为单位)。
-
monotonic:显示自上次启动以来的时间(以 CPU 秒为单位)。
-
printable:确保所有二进制日志记录内容都进行了转义。
-
uid:如果访问控制允许,则显示 UID 或记录的进程的 Android ID。
-
usec:显示精确到微秒的时间。
-
UTC:显示 UTC 时间。
-
year:将年份添加到显示的时间。
-
zone:将本地时区添加到显示的时间。
6、查看备用日志缓冲区
Android 日志记录系统为日志消息保留了多个环形缓冲区,而且并非所有的日志消息都会发送到默认的环形缓冲区。
要查看其他日志消息,您可以使用 -b 选项运行 logcat 命令,以请求查看备用的环形缓冲区。您可以查看下列任意备用缓冲区
-
radio:查看包含无线装置/电话相关消息的缓冲区。
-
events:查看已经过解译的二进制系统事件缓冲区消息。
-
main:查看主日志缓冲区(默认),不包含系统和崩溃日志消息。
-
system:查看系统日志缓冲区(默认)。
-
crash:查看崩溃日志缓冲区(默认)。
-
all:查看所有缓冲区。
-
default:报告 main、system 和 crash 缓冲区。
以下是 -b 选项的用法:
[adb] logcat [-b <buffer>]
以下示例显示了如何查看包含无线装置和电话相关消息的日志缓冲区
adb logcat -b radio
此外,您也可以为要输出的所有缓冲区指定多个 -b 标记,如下所示:
logcat -b main -b radio -b events
您可以指定一个 -b 标记,后跟缓冲区逗号分隔列表,例如:
logcat -b main,radio,events
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接免费拿走:
① 2000多本软件测试电子书(主流和经典的书籍应该都有了)
② 软件测试/自动化测试标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)
可以自助拿走,群号953306497(备注“csdn111”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
相关文章
- uni-app APP地图移动时获取地图中心点经纬度坐标
- 如何开发数藏app
- 如何把小程序游戏运行到自有App中?(IOS篇)
- 不用Mac也可以将打包好的ipa上架App
- 如何使用flask的 @app.url_defaults 装饰器
- 如何使用flask的 @app.teardown_request 装饰器
- Application Loader及Transporter App上传ipa外、可以在Windows上架iOS APP工具
- 如何用苹果app完成ipa安装
- 如何把打包好的app 发布到app store
- 数据时代,APP如何进行数据可视化设计?
- 【Google Play】2021 年 8 月之后的 APK 与 App Bundle 上传格式问题
- 如何在自己APP中接入在线客服系统,App接入第三方在线客服系统方法
- iOS上架app store下载步骤
- 如何用苹果app完成ipa安装
- app上架需要准备什么以及上架流程
- 使用jqMobi开发app基础:注销页面的实现详解手机开发
- [android] 天气app布局练习详解手机开发
- Oracle 视图 DBA_APP_STATEMENTS 官方解释,作用,如何使用详细说明
- 唯一一个被禁后重返印度的中国app,活得如何?
- 孩子启蒙教育的学习软件有哪些,好用的启蒙教育软件APP
- 消息称阿里续约抖音 符合条件商家链接仍可跳转淘宝App
- 掌握MySQL分表分库技术,做出更优质的App!(mysql分表分库技术)
- 我有一个 APP 创意,如何将其实现?
- App测试技术利用Mysql助力质量保障(app测试mysql)
- APP如何连接MySQL数据库(app怎样链接mysql)
- 极速开发APP与MySQL的无缝连接(app 如何连mysql)
- 探索App与MySQL的交互之路(app与mysql交互)
- App与Oracle融合,拥抱数据驱动未来(app与oracle)
- Oracle App驱动的路径探索之旅(oracle app目录)