`

python 读log文件

阅读更多
利用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分析

    标题“工作积累(6)-使用python进行log分析”指出,这个话题主要关注如何利用Python语言对日志(log)数据进行分析。在IT行业中,日志文件是系统、应用程序或服务运行过程中产生的记录,用于追踪错误、调试问题、监控...

    python读取各种文件数据方法解析

    本文将详细介绍如何使用Python读取文本文件(包括`.txt`和`.log`)、XML文件(`.xml`)以及Excel文件(`.xlsx`)。这些方法对于数据分析、自动化脚本编写等场景非常有用。 #### 1. 读取文本文件数据(`.txt` 结尾的...

    python读取xml文件代码

    Python是一种强大的编程语言,尤其在处理数据和文件操作方面表现出色。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准格式,广泛应用于Web服务、配置文件和数据交换等领域。本教程将详细...

    Python 项目备份文件

    首先,Python因其简洁易读的语法和强大的库支持而备受推崇。例如,`requests`库用于HTTP请求,`pandas`用于数据处理,`Django`或`Flask`作为Web框架,`unittest`或`pytest`进行单元测试。这些工具和库极大地提高了...

    python改变日志(logging)存放位置的示例

    感觉还有更好的方法,是直接利用logging.config.fileConfig(log_config_file)方式读进来之后,通过修改handler方式来进行修改。 复制代码 代码如下:“””project trace system“””import sysimport ConfigParser...

    python-log-parse-example:Python中的简单日志解析示例

    "python-log-parse-example"是一个简单的项目,旨在帮助开发者理解如何在Python中解析日志文件。在这个示例中,我们将探讨如何利用Python进行日志分析,包括读取日志文件、解析日志格式以及可能的数据操作。 首先,...

    Python库 | oslo.log-3.15.0.tar.gz

    3. **日志格式化**:oslo.log提供了灵活的日志格式设置,可以包含时间戳、进程ID、线程ID、日志级别等信息,使日志更易读和分析。 4. **上下文信息**:oslo.log可以自动捕获并添加请求ID、用户ID等上下文信息,方便...

    lasio:使用Log ASCII Standard(LAS)文件读取和写入井数据的Python库

    拉西奥 使用Python读写Log ASCII标准文件。 这是一个Python 3.3+软件包,用于读取和写入Log ASCII标准(LAS)文件,用于处理诸如地球物理,地质或岩石物理测井等井眼数据。 它与LAS文件规范的1.2和2.0版本兼容,该...

    Python 查看文件的读写权限方法

    ### Python 查看文件的读写权限方法 #### 知识点概述 本文将详细介绍如何使用Python来检查文件或目录的读写权限,并提供一个实际的例子。掌握这些技能对于进行系统维护、开发过程中权限验证等场景非常有用。 ####...

    Python+pytest+allure+log+yaml+mysql+钉钉企微通知接口自动化框架

    5. **yaml**: YAML是一种易读的数据序列化格式,常用于配置文件。在自动化测试框架中,yaml可以用来存储测试环境配置、参数设置等,方便管理和共享。 6. **mysql**: MySQL是一个常用的开源关系型数据库管理系统,可...

    python 读取更新中的log 或其它文本方式

    Python 读取更新中的日志文件(log)或者其它文本文件是常见的需求,尤其是在实时监控系统状态、调试程序或者构建实时日志传输服务时。在本文中,我们将深入探讨一种有效的方法来解决这个问题,主要利用文件对象的 `...

    Python个人云盘客户端

    1. **Python编程语言**: Python是该客户端的基础,它以其简洁易读的语法和丰富的库支持,使得开发过程更为高效。Python的跨平台特性也确保了该客户端可以在多种操作系统上运行。 2. **源码软件**: 作为开源软件,...

    Python库 | buildbot_status_logentries-0.0.2.tar.gz

    在IT行业中,Python是一种广泛应用的高级编程语言,以其简洁、易读性强的语法特性深受开发者喜爱。本资源是一个名为"buildbot_status_logentries-0.0.2.tar.gz"的Python库,它专注于构建自动化和日志管理。下面将...

    Python库 | pyats.log-19.12-cp37-cp37m-manylinux1_x86_64.whl

    在`pyats.log-19.12-cp37-cp37m-manylinux1_x86_64.whl`这个压缩包中,包含的是`pyats.log`库的特定版本19.12,它是为Python 3.7编译的,并且是针对manylinux1_x86_64(即64位Linux系统)的二进制wheel文件。...

    python读取配置文件方式(ini、yaml、xml)

    ini文件是一种简单易读的文本格式,常用于存储应用程序的配置信息。其基本结构包括节(section)和键值对(key-value pairs)。Python标准库中的`configparser`模块提供了读写ini文件的功能。 1.1 ini文件格式: ``...

    xlog日志解密.zip

    2. **decode_log_file_with_bom.py**:这是一个Python脚本,名字中的“BOM”代表Byte Order Mark,它是UTF-8编码中的一种特殊字符,用于标识文件的字符编码。如果xlog日志文件以BOM开头,这个脚本可能是用来去除BOM...

    Python库 | pyats.log-20.12.2b1-cp36-cp36m-manylinux1_x86_64.whl

    由于提供的压缩包子文件的文件名称列表只有一个,即`pyats.log-20.12.2b1-cp36-cp36m-manylinux1_x86_64.whl`,这表明这个压缩包里仅包含该Python库的单一组件。通常,whl文件不会包含其他辅助文件或子目录,而是...

    python学习实例,简单的python实践

    在这个"python学习实例,简单的python实践"中,我们将探讨如何利用Python进行基本的文件读取和日志写入操作。 一、Python 文件读取 在Python中,我们可以使用内置的`open()`函数来打开一个文件。文件操作通常分为...

Global site tag (gtag.js) - Google Analytics