设为首页 收藏本站
查看: 2621|回复: 0

[经验分享] python分析log

[复制链接]

尚未签到

发表于 2015-11-30 13:33:20 | 显示全部楼层 |阅读模式
  最近做的一个项目,系统log下会生成如下的log(部分):



[2015-05-19 11:16:06] Processing File transfer configured from ship to shore....
[2015-05-19 11:16:06] File Limit is = 2048
[2015-05-19 11:16:06] Done processing File transfer configured from ship to shore....
[2015-05-19 11:16:06] Connection starts now
[2015-05-19 11:16:06] Connected Via FB
[2015-05-19 11:16:06] Before Setting Server URL
[2015-05-19 11:16:06] Setting Server URL is done.
[2015-05-19 11:16:06] SHOREMAIL: Start Preparing Shore Files
[2015-05-19 11:16:07] prepareShoreMail: The outboxDir at shore is empty.
[2015-05-19 11:16:07] SHOREMAIL: End Preparing Shore Files
[2015-05-19 11:16:07] Exchange File: toUpload= true
[2015-05-19 11:16:07] Exchange File: toDownload= false
[2015-05-19 11:16:07] Exchange File: toDelete= true
[2015-05-19 11:16:07] Exchange File: DownStatus= Done
[2015-05-19 11:16:07] Exchange File: emailStatus= 0
[2015-05-19 11:16:07] LogCon: Updating status: Partial
[2015-05-19 11:16:07] Before total_zip_size_sent= 0
....
  然后需要去算它的响应时间,说白了就是给你一堆类似的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,测试结果如下:
DSC0000.png


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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145407-1-1.html 上篇帖子: python操作mongodb数据库 下篇帖子: 用主题模型可视化分析911新闻(Python版)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表