最近做的一个项目,系统log下会生成如下的log(部分):

[-- ::] Processing File transfer configured from ship to shore....
[-- ::] File Limit is =
[-- ::] Done processing File transfer configured from ship to shore....
[-- ::] Connection starts now
[-- ::] Connected Via FB
[-- ::] Before Setting Server URL
[-- ::] Setting Server URL is done.
[-- ::] SHOREMAIL: Start Preparing Shore Files
[-- ::] prepareShoreMail: The outboxDir at shore is empty.
[-- ::] SHOREMAIL: End Preparing Shore Files
[-- ::] Exchange File: toUpload= true
[-- ::] Exchange File: toDownload= false
[-- ::] Exchange File: toDelete= true
[-- ::] Exchange File: DownStatus= Done
[-- ::] Exchange File: emailStatus=
[-- ::] LogCon: Updating status: Partial
[-- ::] Before total_zip_size_sent=
....

然后需要去算它的响应时间,说白了就是给你一堆类似的log,然后你去算每个log运行的时间。有很多语言可以用,我用的python,很久不写,回忆一下
直接上代码:

import os,sys,csv,time,re,datetime;

class cur_env:
path = sys.path[0]
#print(path)
os.chdir(path)
result = path + '\\results' class csv_writer: # get the log file list in the folder
def get_files(self):
file_list = list()
files = os.listdir(cur_env.path)
for file in files:
if file.endswith('.log'):
file_list.append(file)
return file_list # generate result file name depend on run time
def gen_filename(self):
file_name = 'res_' + time.strftime('%y%m%d_%H%M%S',\
time.localtime(time.time()))+'.csv'
return file_name # create result folder if not exist
def create_resFolder(self):
if not os.path.isdir(cur_env.result):
os.makedirs(cur_env.result) # write csv response time log
def write_csv(self, file_name, content):
csvfile = open(cur_env.result + '\\' + file_name,'w+', newline = '')
headers = ['FILE NAME','TIMING(S)','LINE COUNT','DESC','WARNING']
try:
writer = csv.DictWriter(csvfile,headers)
writer.writeheader()
for con in content:
con = dict(zip(headers,con))
writer.writerow(con)
#writer.writerow(headers)
#writer.writerows(content)
finally:
del writer
csvfile.close # generate contents from log files
def gen_contents(self, file_list):
content = list()
for file in file_list:
log = logger(file)
log.generate_content()
logcnt = log.content
logcnt.insert(0,file)
content.append(logcnt)
return content class logger:
'''
"generate 'TIMING','LINE COUNT','DESC','WARNING' from log files"
'''
def __init__(self, file):
self.logfile = open(cur_env.path + '\\' +file,'r+')
self.content = dict() def generate_content(self):
text = self.logfile.read()
# get total lines of the log file
lines = text.count('\n')
pattern = re.compile(r'\[.*\]')
lsttime = re.findall(pattern,text)
if (lines <=0 or len(lsttime) <=0):
warning = 'Unknown issue. Please verify the format of your log file.'
self.content = ['','','',warning]
return
start_time = str(lsttime[0])[1:-1]
end_time = str(lsttime[-1])[1:-1] # get desc. log start time & end time
desc = 'start time is: ' + start_time + '. end time is: ' + end_time # get the response time
timing = time.mktime(time.strptime(end_time,'%Y-%m-%d %H:%M:%S'))\
- time.mktime(time.strptime(start_time,'%Y-%m-%d %H:%M:%S')) # verify if there is any error in the log
pattern = re.compile(r'[Ee][Rr][Rr][Oo][Rr]')
errors = len(re.findall(pattern,text))
if (errors > 0):
warning = 'Totally ' + str(errors) + ' error(s) detected in the log.'
else:
warning = 'NA' # generate result content
self.content = [str(timing),str(lines),desc,warning]
self.logfile.close() # Testing code
writer = csv_writer()
writer.create_resFolder()
file_name = writer.gen_filename()
file_list = writer.get_files()
content = writer.gen_contents(file_list)
writer.write_csv(file_name, content)

三个类,cur_env主要放的系统当前路径之类的,logger类根据每个log文件,生成相关的csv文件的行,关键信息包括 'TIMING','LINE COUNT','DESC','WARNING';最后一个类是写csv文件的csv_writer,测试结果如下:

 

总结: python很久不用,结果很多地方我都要重新去百度或者查帮助,只有自己动手去写了才能记的更清楚。

python分析log的更多相关文章

  1. python 分析慢查询日志生成报告

    python分析Mysql慢查询.通过Python调用开源分析工具pt-query-digest生成json结果,Python脚本解析json生成html报告. #!/usr/bin/env pyth ...

  2. C# 程序A发送Log记录给程序B,程序B处理和分析Log记录

    C# 程序A发送Log记录给程序B,程序B处理和分析Log记录 关键字:C# ;Log记录 ;在线Log记录;Socket:httplistener 一.常用场景 1. APP开发,在真机或者虚拟机上 ...

  3. Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log

    1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...

  4. 用Python分析国庆旅游景点,告诉你哪些地方好玩、便宜、人又少

    注:本人参考“裸睡的猪”公众号同名文章,学习使用. 一.目标 使用Python分析出国庆哪些旅游景点:好玩.便宜.人还少的地方,不然拍照都要抢着拍! 二.获取数据 爬取出行网站的旅游景点售票数据,反映 ...

  5. Python分析盘点2019全球流行音乐:是哪些歌曲榜单占领了我们?

    写在前面:圣诞刚过,弥留者节日气息的大家是否还在继续学习呐~在匆忙之际也不忘给自己找几首好听的歌曲放松一下,缠绕着音乐一起来看看关于2019年流行音乐趋势是如何用Python分析的吧! 昨天下午没事儿 ...

  6. Python分析数据难吗?某科技大学教授说,很难但有方法就简单

    用python分析数据难吗?某科技大学的教授这样说,很难,但要讲方法,主要是因为并不是掌握了基础,就能用python来做数据分析的. 所谓python的基础,也就是刚入门的python学习者,学习的基 ...

  7. 五月天的线上演唱会你看了吗?用Python分析网友对这场线上演唱会的看法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:CDA数据分析师 豆瓣9.4分!这场线上演唱会到底多好看? 首先让我 ...

  8. Python分析离散心率信号(下)

    Python分析离散心率信号(下) 如何使用动态阈值,信号过滤和离群值检测来改善峰值检测. 一些理论和背景 到目前为止,一直在研究如何分析心率信号并从中提取最广泛使用的时域和频域度量.但是,使用的信号 ...

  9. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

随机推荐

  1. 51nod 1336 RMQ逆问题

    RMQ问题是一类区间最值问题,这里给出一个特殊的RMQ问题,初始给定一个n长的排列P,注:n长排列是指有1~n这n个整数构成的一个序列每个整数恰好出现一次.并对这个排列P进行M次查询操作,每次查询形如 ...

  2. Func系列1:安装配置

    简介 Func是由红帽子公司以Fedora平台构建的统一网络控制器,是为解决集群管理.监控问题而设计开发的系统管理框架.它是一个能有效简化多服务多服务器系统管理工作的工具,它易于学习.使用和扩展,功能 ...

  3. rails里routes配置文件里的resources和resource的区别

    抄自 http://stackoverflow.com/questions/11356146/difference-between-resource-and-resources-in-rails-ro ...

  4. ERP_基于Oracle ADF的定制化企业级IT系统解决方案

    2014-12-31 Created By BaoXinjian

  5. [实变函数]2.3 开集 (open set), 闭集 (closed set), 完备集 (complete set)

    1        $$\beex \bea E\mbox{ 是开集}&\lra E^o=E\\        &\lra \forall\ P_0\in E,\ \exists\ U( ...

  6. PHP解析JSON和XML方法

    一.JSON $r = json_decode("json数据"); $result = $r->result; //解析后的数据,以数组形式保存到r里面了,需要通过-> ...

  7. [Java] 使用Comparator排序对象

    package test.collections; import java.util.ArrayList; import java.util.Collection; import java.util. ...

  8. delphi TServerSocket阻塞线程单元 实例

    TServerSocket阻塞线程单元,希望对你有所帮助.需要注意的是:1.如果你使用TServerSocket的stNonBlocking模式,重写TServerClientThread线程时要重载 ...

  9. Font-Awesome for android

    Font-Awesome 是为Bootstrap设计的一个图标集合字体,里面包含了300多个常用图标.使用Font-Awesome还具有如下优点: 1. 减少了图标的绘制工作 2. 可以设置图标的颜色 ...

  10. 如何使weblogic11g类似weblogic923一样统一使用一个boot.properties文件

    如何使weblogic11g类似weblogic923一样 统一使用一个boot.properties文件 1.在weblogic域下创建文件boot.properties输入用户密码例如:usern ...