本文目錄一覽:
- 1、如何用 python 分析網站日誌
- 2、日誌文件太大,python怎麼分割文件,多線程操作
- 3、請教python 如何分日誌級別分文件輸出
- 4、有幾千個TXT格式的log文件,怎麼用Python批量提取每個log文件固定位置的具體數值,輸出到一個TXT文件?
如何用 python 分析網站日誌
日誌的記錄
Python有一個logging模塊,可以用來產生日誌。
(1)學習資料
前邊幾篇文章僅僅是其它人的簡單學習經驗,下邊這個鏈接中的內容比較全面。
(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()
從字符串中提取數據。
字符串操作學習資料:
;method=viewSharedItemThroughLinksharedBy=-1137845767117085734
從上面展示出來的日誌內容可見,主要數據都是用空格分隔,所以需要使用字符串的
split函數對字符串進行分割:
paraList = line.split(),該函數默認的分割符是空格,返回值為一個list。
paraList[3], paraList[4], paraList[5]中分別以字符串形式存儲着我需要的時間戳。
使用float(paraList[3])將字符串轉化為浮點數。
(3)將日誌圖形化。
matplotlib是python的一個繪圖庫。我打算用它來將日誌圖形化。
matplotlib學習資料。
matplotlib的下載與安裝:
對matplotlib的宏觀介紹:
對matplotlib具體使用的詳細介紹:
在matplotlib中設置線條的顏色和形狀:
如果想對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()
日誌文件太大,python怎麼分割文件,多線程操作
python的多線程為偽多線程,多線程並不能提高文件IO的速度,在讀取文件時使用直接讀取 for line in open(‘文件名’, ‘r’) 效率最高,因為此方式為直接讀取,不像其它方式要把文件全部加載到內存再讀取,所以效率最高。分割時文件時,提前計算好行數,把讀取的每固定數量的行數存入新文件,直接讀取完成,最後刪除舊文件,即可實現文件分割。
示意代碼:
line_count = 0
index = 0
fw = open(‘part’+str(index)+’.log’, ‘w’)
for line in open(‘filename.log’, ‘r’):
fw.write(line)
line_count += 1
# 假設每10000行寫一個文件
if line_count 10000:
fw.close()
index += 1
fw = open(‘part’+str(index)+’.log’, ‘w’)
fw.close()
請教python 如何分日誌級別分文件輸出
利用sys.stdout將print行導向到你定義的日誌文件中,例如:
import sys
# make a copy of original stdout route
stdout_backup = sys.stdout
# define the log file that receives your log info
log_file = open(“message.log”, “w”)
# redirect print output to log file
sys.stdout = log_file
print “Now all print info will be written to message.log”
# any command line that you will execute
log_file.close()
# restore the output to initial pattern
sys.stdout = stdout_backup
print “Now this will be presented on screen”
有幾千個TXT格式的log文件,怎麼用Python批量提取每個log文件固定位置的具體數值,輸出到一個TXT文件?
1.將這些TXT文件先合併
2.找到這些具體數值的特徵
3.用正則表達式過濾提取
這陣子正學習python,不介意可以發給我,練着玩
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/276996.html