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

筛查日志这件事,根据情况不同,采用的方法也会有所不同。比如日志很小,至多几千行这样的情况,我们完全可以使用一般的文本编辑器打开,直接查找所需内容即可。而像一些“大型”日志,尤其是长时间稳定性测试所产生的日志,动辄可能会有几个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个时间记录。

结束语

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

有任何想说的话,都可以发送内容到“搜狗测试”公众号,我们一起聊聊~

欢迎添加我们的搜狗测试微信号,与我们一起聊聊测试。

cat日志 搜索_大日志,看我如何对付你相关推荐

  1. 日志间隔_在日志中搜索时间间隔

    日志间隔 介绍 这篇文章与我有关日志分析的迷你系列文章间接相关. 最好阅读两个主要部分,以更好地理解我在说什么. 第1 部分 , 第2部分 . 这篇文章描述了我在实现IDE方法时遇到的一个重要问题. ...

  2. mysql 事务日志备份_事务日志备份与恢复 5

    14.5 用Bak文件恢复到故障点的奥秘 如果数据库被损坏,我们就只能利用备份集文件(通常扩展名为BAK)来恢复数据库,如果备份集中包含了尾日志备份,我们同样能将数据库恢复到故障点. 前面我们已经介绍 ...

  3. mysql事务日志备份_事务日志备份 (SQL Server)

    事务日志备份 (SQL Server)Transaction Log Backups (SQL Server) 01/05/2018 本文内容 适用于:Applies to: SQL ServerSQ ...

  4. 12c集群日志位置_大数据系列教程006-开启日志聚合功能

    Container日志是hadoop各个container记录的日志,其中会包含错误或失败的重要信息.如果没有打开日志聚合,默认是分布在各个nodemanager节点上的.如果打开了日志聚合选项,则会 ...

  5. golang 日志分析_容器日志采集利器:Filebeat深度剖析与实践

    在云原生时代和容器化浪潮中,容器的日志采集是一个看起来不起眼却又无法忽视的重要议题.对于容器日志采集我们常用的工具有filebeat和fluentd,两者对比各有优劣,相比基于ruby的fluentd ...

  6. python3--htmltestrunner 日志显示_实时日志:Serverless Python 运行时支持日志实时输出...

    开发前言 作为一名 Serverless 架构的重度使用者,我一直对调试感到恐慌:经常在测试接口的时候,会通过网页/PostMan 触发函数,然后没得到预期的结果,我就只能傻乎乎的一直点控制台的日志, ...

  7. SQL Server 2008 收缩日志 清空删除大日志文件

    SQL2008 的收缩日志  由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消: (SQL2005) BackupLog DNName ...

  8. 2008日志清理 server sql_SQL Server 2008 收缩日志 清空删除大日志文件

    由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消: (SQL2005) BackupLog DNName with no_log go ...

  9. java操作日志记录_通用日志记录(java)

    /*** 统一日志处理Handler *@authorMingchenchen **/ public classLogAopHandler { @AutowiredprivateAuditLogDao ...

最新文章

  1. Nginx——location配置
  2. find 命令_Linux下查找文件:find 命令
  3. 从阿里中台战略看企业IT架构转型之道(下)
  4. broker可以禁用吗 time_Win8.1系统Runtime Broker是什么进程?可以禁用吗?
  5. 使用Django的models创建mysql数据库
  6. 关于maven打包成.exe
  7. 一个worker thread服务一个客户端
  8. elk 概念整理 集群状态 - yellow
  9. 兄弟姐妹们,祝大家圣诞节快乐!
  10. Android Service 播放音乐
  11. Go基础编程:Socket编程
  12. centos 6.5 thinkpad trackpoint 中间键 滚动设置
  13. 生物信息之独孤九剑——awk
  14. 【k8s-5】kubeadm init过程的错误
  15. linux wifi6,WIFI6 基本知识(一)
  16. echarts省份地图
  17. MATLAB/simulink学习笔记(二)——对正弦函数判断的正负以及分段函数仿真
  18. DJI的核心竞争力是什么?
  19. java双人俄罗斯方块_双人版俄罗斯方块
  20. matlab工具箱拟合函数

热门文章

  1. IntelliJ IDEA中创建xml文件
  2. 第九篇:Spring Boot整合Spring Data JPA_入门试炼03
  3. 希捷银河声音大_【推仔说新闻】那款硬盘它终于来了 希捷推出首款双磁臂硬盘...
  4. qt自定义窗口添加父窗口后,显示不出来
  5. qt样式表中背景图片的使用
  6. Qt中线程的简单使用
  7. php sql查询占位符,使用命名占位符时PHP / SQL插入错误
  8. html视频标签略缩图,JS可以截取video的标签视频缩略图吗?
  9. java怎么跟qtp脚本传参数_QTP多个Action之间传递参数的方法详解
  10. c语言api_用C语言来拓展python的功能