cat日志 搜索_大日志,看我如何对付你

2206881b998ba2a92885a6d0cf8831c0.png

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

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

      显示结果如下:

e921efc73bf697d344e440c779d4ca99.png

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

/04:01

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

      可以看到,日志内容从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

      结果显示:

c00aa95effc6216ac16c5be904d43150.png

     可以看到,从日志中成功筛选出了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

      结果显示:

f00a9b56d4c895182e3c5ce2df944d9c.png

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

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

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

     结果显示:

a8a8e0e162104fee23ffc9902d8dd497.png

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

结束语

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

73245895de34dc1f1fad5d82e8a88a94.png

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

6320377c6b0ffc91cf7b02521727f0e8.png5fc826489b6d3095d2e2f6e019b1ef3d.png

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

e42b501a4c144ee5576a0569379664f4.png

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

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

相关文章

python编译成dll文件_用vc生成可被python调用的dll文件

前提已经有.c 和.i文件 用swid编译了.i文件生成了wrap.c文件和.py文件 vc创建dll工程 将.h加入到头文件中.c文件和wrap.c文件添加到源文件中 将.i文件添加到工程目录下 Tools->Options->Directories中修改include 和lib 添加python里的include 和libs 把\libs\python27.l…

加载gif动图_GIF生成神器——ScreenToGif

每次需要做一个动图展示时,总是感觉很头疼。截图吧,需要的图片太多;录视频吧,文件太大;做动图吧,太麻烦。今天推荐的这个软件或许能够解决大家这个困惑,今天推荐的是动图生成神器——ScreenToGi…

vue底部选择器_vue实现动态显示与隐藏底部导航的方法分析

vue实现动态显示与隐藏底部导航的方法分析本文实例讲述了vue实现动态显示与隐藏底部导航的方法。分享给大家供大家参考,具体如下:在日常项目中,总有几个页面是要用到底部导航的,总有那么些个页面,是不需要底部导航的&a…

java 修改最大nio连接数_关于java流的几个概念:IO、BIO、NIO、AIO,有几个人全知道?...

关于同步、阻塞的知识我之前的文章有介绍,所以关于流用到这些概念与之前多线程用的概念一样。下面具体来看看java中的几种流IO/BIOBIO就是指IO,即传统的Blocking IO,即同步并阻塞的IO。这也是jdk1.4之前的唯一选择,依赖于ServerSocket实现&am…

python神秘的魔法函数_python魔法函数

一、参考二、构造和初始化2.1 __new__在对象实例化过程中最先调用的方法是__new__, 该方法接收参数为类,然后将其他参数,传递给__init__, 该魔法函数比较少见,可以使用其,创建单例类; __new__方法是一个类方法,需要携带…

python扫雷 广度优先_广度优先搜索(BFS)解题总结

定义 广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。 简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。 如果所有节点均被访问,则算法中止。 BFS同样属于盲目搜索。 一般用队…

python默认参数陷阱_python默认参数陷阱

0|1陷阱?学过函数的人一定听说过函数的默认参数,关于函数的默认参数,请看以下的例子:def extendList(val, lst[]):lst.append(val)return lstlist1 extendList(10)list2 extendList(123, [])print(list1 %s % list1)print(list…

python裁剪图片并保存_python – 如何从图像中剪切轮廓并将其保存到新文件中

大家好,这是我的第一个问题所以请保持温和.我有一个计算机视觉领域的项目,我是新的,我会很感激一些帮助.我有一个pcb的图像,我的(首先)任务是从背景中切断电路板并将其保存到新文件.如果结果只是没有灰色背景的普通pcb,那就没问题了. 我到目前为止尝试的是,首先使用阈值将图像转…

opencv如何把一个矩阵不同列分离开_学习OPEN_CV

OpenCv中文论坛精华地址http://www.opencv.org.cn/index.php/User:Ollydbg23http://sivp.sourceforge.net/(sivp)一、基础操作1. 数据类型 数据结构了解图像相关:cvArr cvMat IplImage数据数组的维数, 与数据的通道数 见P46 (76)2. 常见的矩阵操作熟悉3…

python文件合并_用Python 将两个文件的内容合并成一个新的文件.

一个文件的内容是:IntroductiontoProgramming,NetworkingFundamentals,InternetworkingTechnologies,PlatformTechnologies,InformationTechnologyforUsers,ComputerForensics,Enterpr... 一个文件的内容是: Introduction to Programming, Networking Fundamentals, Internetwo…

flash代码_Flash如何对制作文件进行优化

对FLASH进行优化分为两方面,一方面是代码上的优化,主要是通过优化提高FLASH性能,降低CPU占用和内存使用。另一方面是资源的优化,这方面的优化是为了减小编译后的文件大小以及制作文件的大小,因为如果不进行相应的优化&…

潜流式湿地计算_人工湿地计算书

人工湿地计算书1、尾水提升泵房集水池基本参数集水池设计规模为30000m3/d,约折合1250m3/h,按水力停留时间HRT为0.25 h计,集水井有效容积应为312.5 m3,考虑到与污水厂原有排污管道相契合,集水设计尺寸为:LBH…

deepin系统转为windows_windows系统下安装深度系统deepin

前期准备DiskGenius(用来扩展分区)deepin-20-amd64.iso(深度系统镜像文件)相关文件下载首先下载安装时要用的工具,分别为:DiskGenius , UltraISODiskGenius是一款磁盘工具,创建系统分区。UltraISO是用来打开系统光盘镜像文件工具。Win8/8.1/10无需下载Ul…

c3等待加载样式 vue_Vue.js__简易加载等待动画

Vue.js__简易加载等待动画Vue实现为览或讲琐了过自系一读页围这就多网解元当维自加,加载动画的样式取自其他出处,侵直分调浏器代,刚求的一学础过功互有解小久宗点差维含数删。将Vue属性览或讲琐了过自系一读页围这就多网解元当维和方法复制到…

软件开发模型_QT开发(二十三)——软件开发流程

一、软件开发流程简介软件开发流程是通过一系列步骤保证软件产品的顺利完成,是软件产品在生命周期内的管理学。软件开发流程的本质是软件开发流程与具体技术无关,是开发团队必须遵守开的规则。二、常见软件开发流程模型常见的软件开发流程模型包括即兴模…

python循环语句for计数_Bash For循环(递增计数)与for循环用法详解

先来看for循环的例子&#xff1a;用Bash Shell的for循环&#xff0c;每次递增数是500。复制代码 代码示例:#!/bin/bash##每次递增的数ADD_NUM500#递增1的话取消下行注释&#xff0c;并相应的注释另一句for的开头的#for ((i1;i<29500;i))#递增定义的数for ((i1;i<29500;i$…

python3.6.2用pyinstaller3.4报错_OceanBase 2.2 版本体验:用 BenchmarkSQL 跑 TPC-C

OB君&#xff1a;好消息&#xff01;「 OceanBase 2.2 版本 」正式上线官网啦&#xff01;&#xff08;点击阅读原文即可直接下载&#xff09;OceanBase 2.2版本是成功支撑2019年天猫双11大促的稳定版本&#xff0c;同时也是用于TPC-C测试且荣登TPC-C性能榜首的版本。我们将在接…

hive窗口函数_Hive sql窗口函数源码分析

在了解了窗口函数实现原理 spark、hive中窗口函数实现原理复盘 和 sparksql比hivesql优化的点(窗口函数)之后&#xff0c;今天又撸了一遍hive sql 中窗口函数的源码实现&#xff0c;写个笔记记录一下。简单来说&#xff0c;窗口查询有两个步骤&#xff1a;将记录分割成多个分区…

容大打印机ip修改工具_M1芯片版Mac无法连接打印机怎么办?

文末有优惠券在入手了M1芯片版MacBook Pro后&#xff0c;昨天我打算连接一下实验室的打印机。这个打印机的型号是HP LaserJet Professional M1213nf MFP&#xff0c;在同一个局域网内通过搜索IP即可连接。在我的旧设备2015款MacBook Air上&#xff0c;很轻松就连接了打印机。可…

语音对讲软件_三款语音转文字工具,语音输入,高效转换,准确率高

关于语音转文字的软件我在之前讲了很多&#xff0c;有些人听了也用了&#xff0c;效果不错&#xff0c;有些人看了就忘了&#xff0c;主要是不知道用它干嘛&#xff0c;其实语音转文字的软件主要功能就是为了让自己在写作的时候可以减少时间&#xff0c;提高效率&#xff0c;其…