1. 程式人生 > >使用python製作簡單的日誌以及日誌分析工具

使用python製作簡單的日誌以及日誌分析工具

       最近,我需要將多客戶模擬器在執行中產生的一些資料記錄下來,同時使用適當

的方法(例如圖形化,還有。。。?)對其進行分析。

1. 日誌的記錄

    python有一個logging模組,可以用來產生日誌。

    (1)學習資料

       http://blog.sina.com.cn/s/blog_4b5039210100f1wv.html

       http://blog.donews.com/limodou/archive/2005/02/16/278699.aspx

       http://kenby.iteye.com/blog/1162698

       http://blog.csdn.net/fxjtoday/article/details/6307285

        前邊幾篇文章僅僅是其它人的簡單學習經驗,下邊這個連結中的內容比較全面。

       http://www.red-dove.com/logging/index.html

    (2)我需要關注內容

  •  日誌資訊輸出級別

logging模組提供了多種日誌級別,如:NOTSET(0),DEBUG(10),

INFO(20),WARNING(30),WARNING(40),CRITICAL(50)。

設定方法:

       logger = getLogger()

       logger.serLevel(logging.DEBUG)

  • 日誌資料格式

使用Formatter設定日誌的輸出格式。

設定方法:

       logger = getLogger()

       handler = loggingFileHandler(XXX)

       formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")

       %(asctime)s表示記錄日誌寫入時間,"%Y-%m-%d,%H:%M:%S“設定了時間的具體寫入格式。

       %(levelname)s表示記錄日誌的級別。

       %(message)s表示記錄日誌的具體內容。

  • 日誌物件初始化

def initLog():

        logger = logging.getLogger()

        handler = logging.FileHandler("日誌儲存路徑")

        formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")

        handler.setFormatter(formatter)

        logger.addHandler(handler)

        logger.setLevel

  • 寫日誌

 logging.getLogger().info(), logging.getLogger().debug()......     

2. 日誌的分析。

        (1)我的日誌的內容。(log.txt)

2011-12-12,12:11:31 INFO Client1: 4356175.0 1.32366309133e+12 1.32366309134e+12
2011-12-12,12:11:33 INFO Client1: 4361320.0 1.32366309334e+12 1.32366309336e+12
2011-12-12,12:11:33 INFO Client0: 4361320.0 1.32366309389e+12 1.32366309391e+12
2011-12-12,12:11:39 INFO Client1: 4366364.0 1.32366309934e+12 1.32366309936e+12
2011-12-12,12:11:39 INFO Client0: 4366364.0 1.32366309989e+12 1.32366309991e+12
2011-12-12,12:11:43 INFO Client1: 4371416.0 1.32366310334e+12 1.32366310336e+12
2011-12-12,12:11:43 INFO Client0: 4371416.0 1.32366310389e+12 1.32366310391e+12
2011-12-12,12:11:49 INFO Client1: 4376450.0 1.32366310934e+12 1.32366310936e+12

我需要將上述內容逐行讀出,並將三個時間戳提取出來,然後將其圖形化。

          (2) 檔案操作以及字串的分析。

  • 開啟檔案,讀取出一行日誌。

file = file("日誌路徑",“r”)

while True:

      line = file.readline()

      if len(len) == 0:

            break;

      print line

file.close()

  • 從字串中提取資料。

字串操作學習資料:

      http://reader.youdao.com/sharelite?itemId=-4646262544179865983&method=viewSharedItemThroughLink&sharedBy=-1137845767117085734

從上面展示出來的日誌內容可見,主要資料都是用空格分隔,所以需要使用字串的

split函式對字串進行分割:

       paraList = line.split(),該函式預設的分割符是空格,返回值為一個list。

       paraList[3], paraList[4], paraList[5]中分別以字串形式儲存著我需要的時間戳。

  • 使用float(paraList[3])將字串轉化為浮點數。 

         (3)將日誌圖形化。

                      matplotlib是python的一個繪相簿。我打算用它來將日誌圖形化。

  • matplotlib學習資料。

matplotlib的下載與安裝:

         http://yexin218.iteye.com/blog/645894

         http://blog.csdn.net/sharkw/article/details/1924949

對matplotlib的巨集觀介紹:

         http://apps.hi.baidu.com/share/detail/21928578

對matplotlib具體使用的詳細介紹:

         http://blog.sina.com.cn/s/blog_4b5039210100ie6a.html

在matplotlib中設定線條的顏色和形狀:

         http://blog.csdn.net/kkxgx/article/details/python

如果想對matplotlib有一個全面的瞭解,就需要閱讀教程《Matplotlib for Python developers》,教程下載地址:

  • 使用例項
import matplotlib.pyplot as plt

listX = [] #儲存X軸資料
listY = [] #儲存Y軸資料
listY1 = [] #儲存Y軸資料

file = file("../log.txt","r")#開啟日誌檔案

while True:
    line = file.readline()#讀取一行日誌
    if len(line) == 0:#如果到達日誌末尾,退出
        break
    paraList = line.split()
    print paraList[2]
    print paraList[3]
    print paraList[4]
    print paraList[5]
    if paraList[2] == "Client0:": #在座標圖中新增兩個點,它們的X軸數值是相同的
        listX.append(float(paraList[3]))
        listY.append(float(paraList[5]) - float(paraList[3]))
        listY1.append(float(paraList[4]) - float(paraList[3]))

file.close()

plt.plot(listX,listY,'bo-',listX,listY1,'ro')#畫圖

plt.title('tile')#設定所繪影象的標題

plt.xlabel('time in sec')#設定x軸名稱

plt.ylabel('delays in ms'')#設定y軸名稱

plt.show()