使用AutoHotkey分析日志文件,得到分析报告。

来源:互联网 发布:网络法律法规对游戏 编辑:程序博客网 时间:2024/06/18 05:21

使用AutoHotkey分析日志文件,得到分析报告。

 

由程序自动生成的日志文件一般有固定的格式,而且文件大小通常比较大。当需要分析这样的日志文件,需要用肉眼在成千上万条记录里面寻找异常,那将是大海捞针,十分费力费时。由于这样的日志文件具有固定格式,我们可以过滤掉不关心的记录,留下有用的记录。我们可以通过程序来实现这种过滤,但是代价十分高,因为每种日志文件的格式并不一样,不可能每遇到一种日志就写一个程序吧!这时,AutoHotkey就可以大显身手了,利用它的文件读写功能,简单快捷,无需编译,随时可以修改,随时可以运行。下面展示一下,用AutoHotkey分析日志的方法:

 

需求:

一个PDFTXT的程序,会产生一个结果日志,记录了每个PDF文件转换的结果。记录格式如下:


这个程序运行了一天一夜之后,该日志文件达到1M大小,记录达到10000多行。当我想查看有多少记录因某几种原因而转换失败时,发现大部分记录都是转换成功,失败的也大部分是因为某一个我并不关心的原因。而这些记录,严重干扰了我寻找重要的记录,因此我想把不关心的记录过滤掉,比如将所有转换成功的记录行去掉,但提取其文件的ID,最后将所有转换成功的文件ID归类到一些,写到文件最尾部。而关心的内容则不过滤掉,显示在文件的前面,如下图所示:

这张图里把不关心的记录归类在一起了,其他的记录则原样保留以便分析。下面开始介绍AutoHotkey的实现脚本程序,看看需要多少文字!

 

AutoHotkey实现脚本:

一、首先,写两个处理字符串的函数,方便提取PDF正文ID

StrLeft2Sub( ) 在给定的字符串中寻找某个子串,将其左边的文字截取返回。如:

String = cwin@live.cn

StrLeft2Sub( String, “@”) 返回的值为 cwin

类似地StrRight2Sub( String, “@” ) 返回值为live.cn

 

二、接下来,写一个打开文件的对话框,让用户选择需要转换的文件,保存到变量var_SelectedFile

 

这条语句的效果如下:

 

三、选择好需要生成报告的日志文件之后,得到生成的报告的文件名。

如:temp.log 生成的报告名为 temp_rpt.log

 

 

四、下面读取所选择的日志文件(假设为temp.log ),并且将分析的结果写到 ( 假设为temp_rpt.log )

 

读取文本文件有三种方法:

1、 FileRead, OutputVar, Filename
直接将整个文件读取到内存中,当日志文件较大时,这样很浪费内存。

2、 FileReadLine, OutputVar,Filename, LineNum
一次读取一行文本,需要指定行数。该命令打开文件,读取一行文本,之后就关闭文件了。当要遍历一个行数很多的文本文件时,这种方法不适合。

3、 Loop, Read, InputFile [,OutputFile]
同时打开输入和输出文件,然后循环遍历输入文件,直到处理完毕,关闭文件。在遍历过程中,文件保持打开,文件处理效率较高。我们选择这种方式处理日志文件。

 

这段代码遍历所选择的文件,每次读取一行文本到A_LoopReadLine。第一行中的%var_SelectedFile% 即是变量所选择的文件路径,%var_outfile% 则是输出文件的路径。Var_SelectedFilevar_outfile 是保存文件路径的变量,在其前后加%号,表示取变量的值。

 

var_sub := StrRight2Sub( A_LoopReadLine,"] :" )

将读取出来的一行字符串,截取时间后面的字符串保存到变量var_sub中,为提取正文ID作准备。

 

下面是完整的分析日志的代码:

说明一下:

1、“ifinstring var_sub, 转换成功 ”的含义是:如果字符串var_sub中包含了文字“转换成功”

2var_sucess = %var_sucess%%var_id% 将正文ID 的值增加到var_sucess变量中

3  FileAppend, %A_LoopReadLine%`nLoop循环中的FileAppend 命令,将没有被过滤掉的行原样输出到 var_outfle 文件中。

4if var_sucess <> 表示 if ( var_sucess != “” )

5Loop循环外的FileAppend命令,将归类好的成功转换的正文ID字符串var_sucess附加到指定文件的末尾。注意,在这里要指明附加的目标文件为%var_outfile%

 

 

好了,脚本写完了,可以直接运行了!怎么样,是不是很简捷呀!

 

原创粉丝点击