利用python语言实现读取log文件。并分析文件,计算平均每个事务所用的平均时间,最长,最短时间,统计不完整事务(就是有开始没结束的情况)的总数和详情
部分源码:
# -*- coding: cp936 -*-
#操作系统:winxp
#python版本:2.5
#匹配事务并计算
from datetime import datetime
from DTime import DTime
from DataConvert import DataConvert
class log:
def log(self):
#放置未匹配完成的数据
temp=dict()
#存放待匹配的数据
tempTime=dict()
#存放已匹配完成的数据
avg=dict()
dt=DTime()
i=0
b=True
dc=DataConvert()
items=dc.getData()
strs=items.values()
datas=items.keys()
while b:
try:
#判断数据在之前是否已经存在
order=strs[i][0]
key=strs[i][5]
dtime=strs[i][2]
if temp.has_key(key):
#调用时间转换函数
usetime=dt.convertTime(tempTime.get(key))
othertime=dt.convertTime(dtime)
if usetime>othertime:
usetime=usetime-othertime
elif usetime<othertime:
usetime=othertime-usetime
else:
usetime=usetime-usetime
temp.pop(key)
tempTime.pop(key)
avg[order]=usetime
else:
tempTime[key]=dtime
for k in datas:
if items.get(k)==strs[i]:
temp[key]=k
i=i+1
except:
b=False
print '共处理',i,'条数据'
dc.storeTemp(temp)
return (avg,temp)
#x=log()
#t=x.log()
# -*- coding: cp936 -*-
#从日志文件中得到数据,并处理得到的数据
from File import File
from filterData import filterData
class DataConvert:
def getData(self):
i=0
b=True
self.f=File()
data=dict()
ls=self.f.loadLog()
fd=filterData()
strs=fd.filterStr(ls)
print '加载上次未匹配完的数据'
t=self.f.loadTemp()
if t!=None:
if len(t)!=0:
for value in t.values():
strs.append(value)
print '成功添加上次未匹配完的数据',len(t),'条'
#分解数据
while b:
try:
order=strs[i].split(' ',1)
ip=order[1].split(' [',1)
dtime=ip[1].split('] ',1)
desc=dtime[1].split(': ')
answer=desc[1]
key=strs[i].split(' [')
if data.get(strs[i])!=strs[i]:
l=list()
l.append(order[0])
l.append(ip[0])
l.append(dtime[0])
l.append(desc[0])
l.append(answer)
l.append(key[0])
data[strs[i]]=l
i=i+1
except:
b=False
print '数据转换处理完毕'
return data
def storeTemp(self,temp):
self.f.storeTemp(temp)
#dc=DataConvert()
#dc.getData()
# -*- coding: cp936 -*-
#时间转换类
from datetime import datetime
class DTime:
#datetime(*(time.strptime(date_string, format)[0:6]))
def convertTime(self,dtime):
str=dtime.split(' ')
d=str[0].split('-')
t=str[1].split(':')
yy=d[0]
mm=d[1]
dd=d[2]
hh=t[0]
m=t[1]
ss=t[2]
return datetime(int(yy),int(mm),int(dd),int(hh),int(m),int(ss))
# -*- coding: cp936 -*-
#扫描日志文件
#log为新的要扫描的日志文件
#temp为上次扫描过程中未匹配完的的数据
import cPickle as p
class File:
def loadLog(self):
try:
f=open('log','r')
strs=f.readlines()
return strs
except:
print '加载文件失败,请查看文件是否存在'
finally:
f.close()
def storeTemp(self,data):
try:
f=open('temp','w')
p.dump(data, f)
f.close()
except:
print '存储未匹配完成的数据失败'
finally:
f.close()
def loadTemp(self):
try:
f=open('temp','r')
data=p.load(f)
return data
except:
print '文件中没有数据'
finally:
f.close()
#f=File()
#print f.loadTempTime()
# -*- coding: cp936 -*-
#过滤数据是否合法
class filterData:
def filterStr(self,strs):
i=0
print '一共扫描到',len(strs) ,'条数据'
for spares in strs:
spare=spares.split(' ')
if len(spare)!=7:
i=i+1
strs.remove(spares)
if i!=0:
print '丢弃了',i ,'条不合格的数据'
return strs
#fd=filterData()
#fd.filterStr()
# -*- coding: cp936 -*-
#报表类
class Report:
def report(self,args):
avg=args[0]
leave=args[1]
values=avg.values()
max=values[0]
min=values[0]
maxkeys=list()
minkeys=list()
#find the max value and min value
for value in values:
if max<value:
max=value
if min>value:
min=value
keys=avg.keys()
print '--------------------------报告----------------------------'
print '---完整事务---'
print '完整的事务有:',len(avg),' 个'
print ' 详情如下:'
for key in keys:
if avg.get(key)==max:
maxkeys.append(key)
if avg.get(key)==min:
minkeys.append(key)
#j=j+1
print ' 事务',key,' 的时间为:',avg.get(key)
print ' 其中,最长时间相同的事务有:',len(maxkeys),'个'
for maxkey in maxkeys:
print ' 事务为',maxkey,' 的时间为:',avg.get(maxkey)
print ' 其中,最短时间相同的事务有:',len(minkeys),'个'
for minkey in minkeys:
print ' 事务为',minkey,' 的时间为:',avg.get(minkey)
print '----------------------------------------------------------'
print '---不完整事务----'
print '不完整的事务有:',len(leave),' 个'
print ' 详情如下:'
keys=leave.keys()
for key in keys:
print ' ',leave.get(key)
print '--------------------------结束-----------------------------'
# -*- coding: cp936 -*-
#测试log类
import unittest
from report import Report
from log import log
class TestLog(unittest.TestCase):
def setUp(self):
self.r=Report()
self.Log=log()
def tearDown(self):
self.r=None
self.Log=None
def testLog(self):
test=self.Log.log()
assert test!=None,'测试通过'
#打印报告
self.r.report(test)
def main(self):
suite = unittest.TestLoader().loadTestsFromTestCase(TestLog)
unittest.TextTestRunner().run(suite)
test=TestLog("testLog")
test.main()
分享到:
相关推荐
标题“工作积累(6)-使用python进行log分析”指出,这个话题主要关注如何利用Python语言对日志(log)数据进行分析。在IT行业中,日志文件是系统、应用程序或服务运行过程中产生的记录,用于追踪错误、调试问题、监控...
本文将详细介绍如何使用Python读取文本文件(包括`.txt`和`.log`)、XML文件(`.xml`)以及Excel文件(`.xlsx`)。这些方法对于数据分析、自动化脚本编写等场景非常有用。 #### 1. 读取文本文件数据(`.txt` 结尾的...
Python是一种强大的编程语言,尤其在处理数据和文件操作方面表现出色。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准格式,广泛应用于Web服务、配置文件和数据交换等领域。本教程将详细...
首先,Python因其简洁易读的语法和强大的库支持而备受推崇。例如,`requests`库用于HTTP请求,`pandas`用于数据处理,`Django`或`Flask`作为Web框架,`unittest`或`pytest`进行单元测试。这些工具和库极大地提高了...
感觉还有更好的方法,是直接利用logging.config.fileConfig(log_config_file)方式读进来之后,通过修改handler方式来进行修改。 复制代码 代码如下:“””project trace system“””import sysimport ConfigParser...
"python-log-parse-example"是一个简单的项目,旨在帮助开发者理解如何在Python中解析日志文件。在这个示例中,我们将探讨如何利用Python进行日志分析,包括读取日志文件、解析日志格式以及可能的数据操作。 首先,...
3. **日志格式化**:oslo.log提供了灵活的日志格式设置,可以包含时间戳、进程ID、线程ID、日志级别等信息,使日志更易读和分析。 4. **上下文信息**:oslo.log可以自动捕获并添加请求ID、用户ID等上下文信息,方便...
拉西奥 使用Python读写Log ASCII标准文件。 这是一个Python 3.3+软件包,用于读取和写入Log ASCII标准(LAS)文件,用于处理诸如地球物理,地质或岩石物理测井等井眼数据。 它与LAS文件规范的1.2和2.0版本兼容,该...
### Python 查看文件的读写权限方法 #### 知识点概述 本文将详细介绍如何使用Python来检查文件或目录的读写权限,并提供一个实际的例子。掌握这些技能对于进行系统维护、开发过程中权限验证等场景非常有用。 ####...
5. **yaml**: YAML是一种易读的数据序列化格式,常用于配置文件。在自动化测试框架中,yaml可以用来存储测试环境配置、参数设置等,方便管理和共享。 6. **mysql**: MySQL是一个常用的开源关系型数据库管理系统,可...
Python 读取更新中的日志文件(log)或者其它文本文件是常见的需求,尤其是在实时监控系统状态、调试程序或者构建实时日志传输服务时。在本文中,我们将深入探讨一种有效的方法来解决这个问题,主要利用文件对象的 `...
1. **Python编程语言**: Python是该客户端的基础,它以其简洁易读的语法和丰富的库支持,使得开发过程更为高效。Python的跨平台特性也确保了该客户端可以在多种操作系统上运行。 2. **源码软件**: 作为开源软件,...
在IT行业中,Python是一种广泛应用的高级编程语言,以其简洁、易读性强的语法特性深受开发者喜爱。本资源是一个名为"buildbot_status_logentries-0.0.2.tar.gz"的Python库,它专注于构建自动化和日志管理。下面将...
在`pyats.log-19.12-cp37-cp37m-manylinux1_x86_64.whl`这个压缩包中,包含的是`pyats.log`库的特定版本19.12,它是为Python 3.7编译的,并且是针对manylinux1_x86_64(即64位Linux系统)的二进制wheel文件。...
ini文件是一种简单易读的文本格式,常用于存储应用程序的配置信息。其基本结构包括节(section)和键值对(key-value pairs)。Python标准库中的`configparser`模块提供了读写ini文件的功能。 1.1 ini文件格式: ``...
2. **decode_log_file_with_bom.py**:这是一个Python脚本,名字中的“BOM”代表Byte Order Mark,它是UTF-8编码中的一种特殊字符,用于标识文件的字符编码。如果xlog日志文件以BOM开头,这个脚本可能是用来去除BOM...
由于提供的压缩包子文件的文件名称列表只有一个,即`pyats.log-20.12.2b1-cp36-cp36m-manylinux1_x86_64.whl`,这表明这个压缩包里仅包含该Python库的单一组件。通常,whl文件不会包含其他辅助文件或子目录,而是...
在这个"python学习实例,简单的python实践"中,我们将探讨如何利用Python进行基本的文件读取和日志写入操作。 一、Python 文件读取 在Python中,我们可以使用内置的`open()`函数来打开一个文件。文件操作通常分为...