前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大日志,看我如何对付你

大日志,看我如何对付你

作者头像
用户5521279
发布2019-08-12 15:03:28
1.7K0
发布2019-08-12 15:03:28
举报
文章被收录于专栏:搜狗测试搜狗测试

在服务器接口测试中,我们经常会和各种日志打交道。一旦测试时服务端出现了问题,而单凭服务端的日志又不能发现问题原因的时候,往往开发要向我们测试人员询问客户端这边的情况,希望看看我们能不能提供一些有用信息,如错误返回内容,错误发生时间,哪些用例会出现问题等等。这时就需要我们来查找测试时的日志,从中筛选出有用的信息。

筛查日志这件事,根据情况不同,采用的方法也会有所不同。比如日志很小,至多几千行这样的情况,我们完全可以使用一般的文本编辑器打开,直接查找所需内容即可。而像一些“大型”日志,尤其是长时间稳定性测试所产生的日志,动辄可能会有几个g,几十g,再用编辑器打开显然不够现实。这时,我们可以采用其他的一些查找方法,在不打开日志文件的情况下,较为快速地进行筛选。下面我就来说说几个经常会使用到的命令(方法)。

一、more/less 命令

more和less命令在使用上十分相近,都是用分页查看文本的方式,每次只显示一定行的文本,避免像cat那样被大量的文字快速刷屏,同时支持搜索,可以在文件中搜索某个关键词并实现定位。more和less有一些细微不同的地方,体现在参数设置上。总体而言,less似乎更适合对于日志的筛查,可以进行向前或向后双方向的搜索,并且可以按方向键逐行前后滚动,而more只支持向后查找和向后翻页或滚动。

基本命令格式:

more/less example.log

搜索关键词方法:

输入命令后按"/",输入关键词后回车即可定位至关键词第一次出现的位置,此时按n键可切换至下一次出现的位置,使用less时,按N(shift或大写锁定+n)键返回上一次出现的位置。

优点:

可以自动定位关键词出现的位置,并显示关键词前后的文本内容,使用起来比较方便。

缺点:

搜索速度较慢,文件特别大的话要等很久才能搜索到。

应用举例:

查看日志文件从某时刻开始的内容

首先使用more命令打开一个日志文件

more 2019-08-05_1.csv

显示结果如下:

可以看到日志的内容很多,此时我们关注日志中的时间,比如我想查看从04:01:00 GMT开始的日志,那么就键盘输入:

/04:01

按下回车,就会自动切换至我们想要的位置:

可以看到,日志内容从04:01开始了。

二、grep 命令

grep命令是linux下最好用的命令之一。grep用来筛选内容的速度应该是最快的,这点没有之一,大到几个g的文件,几秒就可以完成对单一关键词的筛取,可谓是查找大文件的“神器”,而且grep命令格式十分简单,常用的搜索功能只需三个参数即可完成。

基本命令格式:

grep keyword example.log

搜索关键词方法:

在keyword位置设置想要搜索的关键词,按下回车,即可将所有包含该关键词的行显示出来。

优点:

快速,可批量筛选出含有关键词的全部文本行。

缺点:

如果关键词在文本中出现较多,无法快速定位至某一次关键词出现的位置,依然会出现刷屏效果。

拓展应用:

在命令中添加-A,-B,-C参数,可分别获取某关键词出现位置后面、前面、前后n行的内容:

grep -A|B|C n keyword example.log

应用举例:

查看日志文件某时刻起向后10行的内容

使用如下命令:

grep -A 10 '04:01:41' 2019-08-05_1.csv

结果显示:

可以看到,从日志中成功筛选出了04:01:41 GMT时刻后面10行的日志内容,比more/less命令搜索速度快了不少,而且内容更加简洁,只包含这部分的内容信息。

三、head/tail 命令

head和tail命令是功能近似而作用位置相反的两个命令,head命令用来从开头读取文本,tail命令则是从尾部读取文本。当我们不关注日志中间的一大坨内容,只关注开头或结尾的部分内容时,head和tail命令可以说是最好的解决方案。

基本命令格式:

head/tail -n example.log

使用方法:

设置需要从文件开头/结尾查找的行数(n),即可显示对应结果。

优点:

方便实用,尤其是tail,可以从尾部读取文件。

缺点:

单独使用不能查找关键词。

拓展应用:

1、head/tail与grep命令结合使用

如果需要从文件开头或结尾一定范围内查找关键词,那么head/tail与grep结合使用就再方便不过了,使用管道符连接两个命令即可:

head/tail -n example.log | grep keyword

反过来,也可以获取含有某关键词所有行中的前/后n个:

grep keyword example.log | head/tail -n

2、tail -f 命令

在测试过程中,我们有时可能需要监测一下当前日志的输出情况,而由于日志在测试程序启动时已经定向到了某个文件,没有给到标准输出,这时我们可以使用tail -f这个十分简便的命令,获取和日志“上屏”相似的效果,随着日志文件的不断更新,该命令也会将更新的内容给到标准输出,同时不影响日志文件的记录:

tail -f example.log

此外,该命令结合grep使用,更可以获得实时筛选日志信息的功能,将简化版、筛取版的日志记录或输出。

应用举例:

查看日志文件前1000行中,测试的时间记录

使用如下命令:

head -1000 2019-08-05_1.csv | grep date

结果显示:

可以看到,这样准确从日志中筛选出了时间记录。

如此,我们还可以进一步拓展命令,利用wc -l来统计时间记录的个数,完整命令如下:

head -1000 2019-08-05_1.csv | grep date | wc -l

结果显示:

可以看到,一共有31个时间记录。

结束语

好了,以上就是本期介绍的几个在日志筛选方面的实用命令,掌握了这些命令,从此可以不再惧怕那些个大文件了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档