首页  >  问答  >  正文

请问我该如何利用python来制作一个日志分析程序?

近期想做一个分析小软件是关于分析日志文件的,当然是用python了,但是捉摸了好久没有太多的思路,希望各位给我一些建议,我该如何分析这个日志。

日志的源文件是类似这样的

$DEBUG 2014-06-24 14:30:01.331@00000000@0000@[../ticketBusiness/InnerUIMsgProc/InnerUIMsgProc.cpp][319]收到界面Url[ file:///Afc/Run/tvm_ui/tvmticket.html?action=3000&singleprice=200 ]
$ INFO 2014-06-24 14:30:01.332@00000000@0000@[../ticketBusiness/InnerUIMsgProc/InnerUIMsgProc.cpp][298]解析后,收到UI命令码为[ 3000 ] 
$ INFO 2014-06-24 14:30:01.332@00000000@0000@[../ticketBusiness/InnerUIMsgProc/InnerUIMsgProc.cpp][327]界面消息:[ 业务START ]消息。
$DEBUG 2014-06-24 14:30:01.332@00000000@0000@[InitUITicketSinglePriceInfo][558]乘客选择价: [ 200 ]

.................由于日志文件行数太多中间这部分我就省略了..........................
.................由于日志文件行数太多中间这部分我就省略了..........................
.................由于日志文件行数太多中间这部分我就省略了..........................

$DEBUG 2014-06-24 14:30:27.849@00000000@0000@[../ticketBusiness/businessInterfaceBase/BusinessInterfaceUIBase.cpp][72] 发送售卡结果URL,售卡结果[0]出数量[1]找零金额[800]
$DEBUG 2014-06-24 14:30:27.849@00000000@0000@[../ticketBusiness/businessInterfaceBase/BusinessInterfaceUIBase.cpp][79] 发送售卡结果URL[file:///Afc/Run/tvm_ui/response.html?action=3010&errorcode=0&outticket=1&changesum=800]
$ INFO 2014-06-24 14:30:27.849@00000000@0000@[../ticketBusiness/InnerUIMsgProc/InnerUIMsgProc.cpp][251]内队列消息[ 确定处理消息 ]处理完成。

每一个乘客在购的时候,系统会在日志文件中记录收到乘客操作指令,就是日志文件中的这一行

$DEBUG 2014-06-24 14:30:01.331@00000000@0000@[../ticketBusiness/InnerUIMsgProc/InnerUIMsgProc.cpp][319]收到界面Url[ file:///Afc/Run/tvm_ui/tvmticket.html?action=3000&singleprice=200 ]

也就代表着一笔交易的START

当一笔交易结束后程序会在日志文件中添加这样一行记录作为一笔交易的结束日志

$ INFO 2014-06-24 14:30:27.849@00000000@0000@[../ticketBusiness/InnerUIMsgProc/InnerUIMsgProc.cpp][251]内队列消息[ 确定处理消息 ]处理完成。

我现在想的是如何利用python将日志文件中 每一笔完整的交易日志(不是每一行)单独提取出来以后,进行逐行分析,但是有一个关键点,也是为什么要做这个日志分析软件的原因就是这个系统可能存在bug,导致进程之间通信中断,直接导致某一笔交易日志残缺不全,也就是说很可能日志文件中某一笔交易没有“内队列消息[ 确定处理消息 ]处理完成”这一行或者这一行以上的若干行,那在如何读取一笔完整交易日志记录的时候就存在问题了,如何能实现在提取日志文件中

[../ticketBusiness/InnerUIMsgProc/InnerUIMsgProc.cpp][319]收到界面Url[ file:///Afc/Run/tvm_ui/tvmticket.html?action=3000&singleprice=200 ]

有这样字样的记录到下一次再次出现这条记录中间的部分 就可以理解为是一笔交易记录。

代码的逻辑这块没啥太好的思路希望各位给我一些好的思路。

提示:日志文件是每10MB一个,当日志文件容量达到10MB以后就自动生成下一个日志文件,tvmticket.log、tvmticket.log.1、tvmticket.log.2、tvmticket.log.3,数字越大的日志记录时间越靠前,如果想合并出一个完整的日志文件先要读取tvmticket.log.3然后tvmticket.log.2、tvmticket.log.1、tvmticket.log。

天蓬老师天蓬老师2741 天前535

全部回复(1)我来回复

  • 大家讲道理

    大家讲道理2017-04-18 10:27:55

    我不知道代码要什么逻辑,我看你说的挺清晰的,是在问代码怎么实现? 解决你的问题 我几行代码解决。
    大概代码

    a = log3 + log2 +log1
    print re.findall('.+收到界面Url[\s\S]+?处理完成。', a)  #得到每笔的log, 如果不全 你可以再对它检验
    

    回复
    0
  • 取消回复