大家中午好,由于过年一直还没回到状态,好久没分享一波小知识了,今天,继续给大家分享一波Python解析日志的小脚本。
首先,同样的先看看日志是个啥样。
都是xml格式的,是不是看着就头晕了??没事,我们先来分析一波。
1.每一段开头都是catalina-exec,那么我们就按catalina-exec来分,分了之后,他们就都是一段一段的了。
2.然后,我们再在已经分好的一段段里面分,找出你要分割的关键字,因为是xml的,所以,接下来的工作就简单了,都是一个头一个尾的。
3.但是还有一个问题,有可能有的里面没有你想要的关键字,所以你要判断下,如果没有这个字段,那么我就把这个字段设置为空。
思路清晰了,代码自然而然就简单了。
接下来我们就看看代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#coding:utf-8
import re
#文本所在TXT文件
file = 'iag_interface.log'
#分割一段
xml1 = 'catalina-exec'
xml2 = 'catalina-exec'
#关键字reqtimestamp
time1 = '<timestamp>'
time2 = '</timestamp>'
#关键字functionid
functionid1 = '<functionid>'
functionid2 = '</functionid>'
#关键字transid
transid1 = '<transid>'
transid2 = '</transid>'
#关键字siappid
siappid1 = '<siappid>'
siappid2 = '</siappid>'
#关键字userid
userid1 = '<userid>'
userid2 = '</userid>'
#关键字mobnum
mobnum1 = '<mobnum>'
mobnum2 = '</mobnum>'
f = open ( file , 'r' ,encoding = 'utf-8' )
#f = open(file,'r')
#for (num,value) in enumerate(f):
#print("line number",num,"is:",value)
buff = f.read()
#清除换行符,请取消下一行注释
#buff = buff.replace('\n','')
pat = re. compile (time1 + '(.*?)' + time2,re.S)
pat1 = re. compile (functionid1 + '(.*?)' + functionid2,re.S)
pat2 = re. compile (transid1 + '(.*?)' + transid2,re.S)
pat3 = re. compile (siappid1 + '(.*?)' + siappid2,re.S)
pat4 = re. compile (userid1 + '(.*?)' + userid2,re.S)
pat5 = re. compile (mobnum1 + '(.*?)' + mobnum2,re.S)
pat6 = re. compile (xml1 + '(.*?)' + xml2,re.S)
result6 = pat6.findall(buff)
print ( len (result6))
x = open ( "logfx.txt" , 'w' )
x.write( "===========================开始数据=================================" + "\n" )
x.write( "time" + "\t" + "functionid" + "\t" + "transid" + "\t" + "siappid" + "\t" + "userid" + "\t" + "mobnum" + "\n" )
for i in range ( 0 , len (result6)):
result = pat.findall(result6[i])
result1 = pat1.findall(result6[i])
result2 = pat2.findall(result6[i])
result3 = pat3.findall(result6[i])
result4 = pat4.findall(result6[i])
result5 = pat5.findall(result6[i])
if len (result) = = 0 :
result.append( "空" )
if len (result1) = = 0 :
result1.append( "空" )
if len (result2) = = 0 :
result2.append( "空" )
if len (result3) = = 0 :
result3.append( "空" )
if len (result4) = = 0 :
result4.append( "空" )
if len (result5) = = 0 :
result5.append( "空" )
#print(result[0],"=",result1[0],"=",result2[0],"=",result3[0],"=",result4[0],"=",result5[0])
x.write( "timestamp:" + result[ 0 ] + "\t" + result1[ 0 ] + "\t" + result2[ 0 ] + "\t" + result3[ 0 ] + "\t" + result4[ 0 ] + "\t" + "mobnum:" + result5[ 0 ] + "\n" )
x.write( "===========================结束数据=================================" + "\n" )
print ( "执行完毕!生成文件logfx.txt" )
x.close()
|
运行下代码
python解析基于xml格式的日志文件把所有数据运行成功了。接下来查看文件
好了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/u010798367/article/details/56489602