最近,我需要將多客戶模擬器在運行中產生的一些資料記錄下來,同時使用適當
的方法(例形化,還有。。。?)對其進行分析。
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的下載與安裝:
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》,教程:
http://download.csdn.net/detail/nmgfrank/4006691
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()