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

我不明白 发布于 2017/03/03 17:06
阅读 551
收藏 0

近期想做一个分析小软件是关于分析日志文件的,当然是用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。

 

加载中
0
芝麻糖人
芝麻糖人
正则表达式
我不明白
我不明白
正则?能把整个日志内的每一笔交易离出来?
0
您的好友
您的好友

1. 逐行读啊    每读到一条就加到队列里  读到交易起始点   就把队列刚刚队列里的作为一个完整或者不完整的一次交易进行下一步处理  

2. 直接正则匹配     /起始行正则表达式\n.+?/g  就可以匹配到交易了   

我不明白
我不明白
回复 @您的好友 : python 中 的数组其实就是列表。
您的好友
您的好友
大概就数组
我不明白
我不明白
您说的队列是什么概念?不太懂,我是初学
0
KylinSun
KylinSun

何必造轮子 开源日志分析很多的

返回顶部
顶部