請問我該如何利用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。
問題解答
回答1:我不知道代碼要什么邏輯,我看你說的挺清晰的,是在問代碼怎么實現? 解決你的問題 我幾行代碼解決。大概代碼
a = log3 + log2 +log1print re.findall(’.+收到界面Url[sS]+?處理完成。’, a) #得到每筆的log, 如果不全 你可以再對它檢驗
相關文章:
1. docker-machine添加一個已有的docker主機問題2. javascript - 新建js文件時如何自動地加上"use strict"?3. javascript - 如何獲取未來元素的父元素在頁面中所有相同元素中是第幾個?4. apache - nginx 日志刪除后 重新建一個文件 就打不了日志了5. node.js - node express 中ajax post請求參數接收不到?6. java - 原生CGLib內部方法互相調用時可以代理,但基于CGLib的Spring AOP卻代理失效,為什么?7. java - tomcat服務經常晚上會掛,求解?8. javascript - 用jsonp抓取qq音樂總是說回調函數沒有定義9. windows-7 - Win7中Vmware Workstatoin與Xampp中Apache服務器端口沖突?10. javascript - 新浪微博網頁版的字數限制是怎么做的
