最近为了分析程序运行情况,以及得出机器的最高性能。需要从日志文件中得出程序输出、效率;为了使用数据直观,工作方便,于是使用了python.

日志文件如下

2020-03-06 00:13:29.134 [Debug]: SnapFaceMongoDao::syncData2Java response:{"status":200}
2020-03-06 00:13:29.134 [Debug]: SnapFaceMongoDao::syncData2Java all use: 19
2020-03-06 00:13:29.134 [Debug]: AlarmWithoutMask camera_id:269 wear_mask:0, face_id:4040e0e85efc11eaa4d3ac1f6b947f3a
2020-03-06 00:13:29.135 [Debug]: SnapFaceMongoDao::syncData2Java response:{"status":200}
2020-03-06 00:13:29.135 [Debug]: SnapFaceMongoDao::syncData2Java all use: 19
2020-03-06 00:13:29.135 [Debug]: AlarmWithoutMask camera_id:269 wear_mask:0, face_id:4040ddf05efc11ea9ed0ac1f6b947f3a
2020-03-06 00:13:29.137 [Debug]: PersonAttributeMongoDao::syncData2Java response:success
2020-03-06 00:13:29.137 [Debug]: PersonAttributeMongoDao::syncData2Java time statis use: 16
2020-03-06 00:13:29.137 [Debug]: single person total cost: 132------------
2020-03-06 00:13:29.137 [Debug]: SnapAlarmMongoDao::syncData2Java time statis type:5 use: 15
2020-03-06 00:13:29.137 [Information]: !!!!!!!!!!!!!!!!!!camera[269] catch person[] without mask!!!!!!!!!!!!!!!
2020-03-06 00:13:29.138 [Debug]: SnapAlarmMongoDao::syncData2Java time statis type:5 use: 15
2020-03-06 00:13:29.138 [Information]: !!!!!!!!!!!!!!!!!!camera[269] catch person[] without mask!!!!!!!!!!!!!!!
2020-03-06 00:13:29.146 [Debug]: PersonAttributeMongoDao::syncData2Java response:success
2020-03-06 00:13:29.146 [Debug]: PersonAttributeMongoDao::syncData2Java time statis use: 38
2020-03-06 00:13:29.146 [Debug]: single person total cost: 141------------
2020-03-06 00:13:29.148 [Debug]: PersonAttributeMongoDao::syncData2Java response:success
2020-03-06 00:13:29.148 [Debug]: PersonAttributeMongoDao::syncData2Java time statis use: 31

需要从

2020-03-06 00:13:29.134 [Debug]: SnapFaceMongoDao::syncData2Java all use: 19

2020-03-06 00:13:29.137 [Debug]: PersonAttributeMongoDao::syncData2Java time statis use: 16

2020-03-06 00:13:29.137 [Debug]: SnapAlarmMongoDao::syncData2Java time statis type:5 use: 15

2020-03-06 00:13:29.212 [Debug]: SnapSceneMongoDao::syncSceneDataToJava time record id:404cb2245efc11ea9827ac1f6b947f3a use: 34

2020-03-06 00:13:29.252 [Debug]: SnapBodyMongoDao::syncData2Java use: 19 id:404cfaa45efc11eaa0a5ac1f6b947f3a

提取出时间和耗时,另外对其计数

#!/usr/bin/python2.7
# -*- coding: UTF-8 -*-
import os
import re
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# str = '2020-03-05 12:52:29.272 [Debug]: SnapFaceMongoDao::syncData2Java all use: 16'
# pattern = re.compile(r'^2020-03-05 12:5[0-2].+$')
# match = pattern.match(str)
#
# if match:
#     print(match.group())def findlog_by_time_indir(log_dir, pattern, out_file_name):ofile = open(out_file_name, 'w')file_names = os.listdir(log_dir)for file_name in file_names:print(file_name)if not os.path.isdir(file_name):f = open(log_dir + "/" + file_name, "r")iter_f = iter(f)for line in iter_f:match = pattern.match(line)if match:print(match.group())ofile.writelines(match.group())ofile.write("\n")def statistics_count(input_file, pattmap, out_count): #处理成二维数组,[[时间,数量,耗时]]with open(input_file) as f:iter_f = iter(f)for line in iter_f:for key, value in pattmap.items():pattern = re.compile(r'' + value)match = pattern.match(line)if match:cur_time = match.group(1)cur_time = datetime.strptime(cur_time, '%Y-%m-%d %H:%M:%S.%f')use_time = match.group(2)use_time = int(use_time)if(out_count.has_key(key)):old_count = out_count[key][-1][1]out_count[key].append([cur_time, old_count + 1, use_time])else:out_count[key]=[[cur_time, 1, use_time]]breakdef draw_time_count(out_count):# plt.figure(figsize=(200,180), dpi=80)plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M')) #横坐标日期显示格式plt.gca().xaxis.set_major_locator(mdates.MinuteLocator(interval = 10)) #横坐标每过5分钟画一个点plt.xlabel('time')plt.ylabel('count')last_value_map = {}dtime_min = datetime.strptime('2050-03-06 12:00:00.000', '%Y-%m-%d %H:%M:%S.%f') #不能对None对象赋值for key in out_count:plot_np_array = np.array(out_count[key]) #转化为np用于切片xs = plot_np_array[:,0] #切片,':'前面没东西表示所有行,0表示取0列,取出之后组成一个新的一listys = plot_np_array[:,1]if (xs[0] < dtime_min):dtime_min = xs[0]last_value_map[key] = (xs[-1], ys[-1])plt.plot(xs, ys, label=key)yoffset = 0for key,value in last_value_map.items():if key!='SnapScene':plt.scatter(value[0], value[1] - yoffset) #在坐标处画一个标注,一般是一个点plt.annotate(key + ' ' + str(value[1]), (value[0], value[1]), (value[0], value[1] - yoffset)) #在坐标处添加文本注释yoffset += 20000else:plt.scatter(value[0], value[1])plt.annotate(key + ' ' + str(value[1]), (value[0], value[1]))plt.xlim(xmin=dtime_min)#设置x轴的范围plt.ylim(ymin=0)#设置y轴的范围plt.gcf().autofmt_xdate() #自动旋转x轴日期显示plt.legend(loc='upper left') #添加legendplt.show()def draw_time_cost(out_count):# plt.figure(figsize=(200,180), dpi=80)plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M')) #横坐标日期显示格式plt.gca().xaxis.set_major_locator(mdates.MinuteLocator(interval = 5)) #横坐标每过5分钟画一个点plt.xlabel('time')plt.ylabel('cost time')for key in out_count:plot_np_array = np.array(out_count[key]) #转化为np用于切片xs = plot_np_array[:,0] #切片,':'前面没东西表示所有行,0表示取0列,取出之后组成一个新的一listys = plot_np_array[:,2]plt.plot(xs, ys, label=key)plt.gcf().autofmt_xdate() #自动旋转x轴日期显示plt.legend(loc='upper left') #添加legendplt.show()def main():# findlog_by_time_indir("log", re.compile(r'2020-03-06 0[0-1]:\d\d.+$'), "log_bytime.txt")labes_map = {'SnapFace': '(.+) \[Debug\]: SnapFaceMongoDao::syncData2Java all use: (\d+)','SnapBody': '(.+) \[Debug\]: SnapBodyMongoDao::syncData2Java use: (\d+)','SnapScene': '(.+) \[Debug\]: SnapSceneMongoDao::syncSceneDataToJava time record id:.+ use: (\d+)','SnapAlarm': '(.+) \[Debug\]: SnapAlarmMongoDao::syncData2Java time statis type:\d use: (\d+)','Attribute': '(.+) \[Debug\]: PersonAttributeMongoDao::syncData2Java time statis use: (\d+)'}out_count = {}print  'statistics start'statistics_count('/home/whl/seye-logs-21/log/KLMediaServer.log', labes_map, out_count)# print 'draw_time_count start'# draw_time_count(out_count)print 'draw_time_cost start'draw_time_cost(out_count)if __name__ == '__main__':main()

运行结果为

使用python处理日志文件相关推荐

  1. python输出日志文件_python将print输出的信息保留到日志文件中

    具体代码如下所示: import sys import os import sys import io import datetime def create_detail_day(): ''' :re ...

  2. python写日志文件_Python logging日志模块 配置文件方式

    在一些微服务或web服务中我们难免需要日志功能,用来记录一些用户的登录记录,操作记录,以及一些程序的崩溃定位,执行访问定位等等; Python内置 非常强大的日志模块 ==> logging 今 ...

  3. python生成日志文件_Python 日志生成器

    需求分析 网站日志需求分析 由于缺乏真实网站日志,在这里用 Python 2.7.5 构建日志生成器模拟网站日志,作为之后实验的基础. 之后的实验为用 Flume 采集网站的日志信息,基于此做一系列的 ...

  4. python保存日志文件

    文章目录 切换系统输出流 logging模块输出日志 更实用的方法(一次实现,全局调用) 一般写大型程序的时候,程序运行时间都比较长,将一些必要的输出保存到日志文件中是很有必要的.下面提供两种将输出保 ...

  5. Python写日志文件

     日志文件是记录程序操作及事件的记录文件或记录文件的集合.一般由程序开发人员编写,开发.运维人员共同使用,开发人员可以通过日志调试程序,运维人员通过日志检查程序近期是否正常运行,如果出现异常,则可通过 ...

  6. python 处理日志文件

    2019独角兽企业重金招聘Python工程师标准>>> 对文本文件的处理,采用的是逐行处理的方法.Python代码如下: #coding:utf-8 import re import ...

  7. python 读取日志文件_如何在Python中跟踪日志文件?

    使用SH模块(PIP安装sh):from sh import tail# runs foreverfor line in tail("-f", "/var/log/som ...

  8. php 项目操作日志文件,什么是操作日志?关于操作日志实例用法汇总

    记录应用程序的操作日志可以使用数据库.文本文件.xml文件等.我这里介绍的是使用 XML 文件记录操作日志.我觉得使用 XML 记录操作日志有如下几点好处:1. 不占用数据库的空间,可以任意的删除历史 ...

  9. Python分析csv文件及可视化绘图

    简介 项目中经常需要对日志文件进行分析,之前使用Shell,常用的是grep, awk, sed等. 使用Shell有一个缺点,就是可视化不友好,经常需要把分析后的文件导出,再用Python/Exce ...

最新文章

  1. 单片机与微处理器和微型计算机的关系,微处理器、CPU、微处理机、微机、单片机它们之间有何区别?...
  2. TFTP、RAM、NVRAM之间的关系
  3. [Security]XSS一直是个棘手的问题
  4. 【模块】ESP32CAM arduino程序下载方法及注意事项避坑笔记
  5. 通过 UserAgent 判断是否在我们自己的安卓APP中
  6. mysql用户管理+pymysql模块
  7. Canvas绘制星球轨迹移动
  8. [dp]最长单调递增子序列LIS
  9. MyBatis动态传入表名,字段名参数的解决办法
  10. 13 大论坛同开播!数百专家带你从机器学习技术与工程实践,聊到开源生态 | AI ProCon 2020...
  11. Kafka日志清除策略
  12. cad 计算机图库,CAD超级图库
  13. 手机怎么在线拍照翻译英语?这个方法不能不知道
  14. LaTeX 中的数学字体
  15. Python房贷计算器GUI(等额本息,等额本金)
  16. 解析 embedded.mobileprovision 获取信息
  17. 液晶知识 占空比(Duty)定义 偏压比(Bias)定义 及两者之间 kinglcm88|创建时间:2016年05月19日 11:53|浏览:525|评论:0 标签:液晶 占空比 Duty 偏压
  18. 粒子群算法组卷_概率表示的二进制粒子群算法在组卷中的应用
  19. RGB色彩模型图像/像素深度
  20. --zigbee物联网工程项目(一)

热门文章

  1. 获取权限android sync,GitHub - AndSync/XPermissionUtils: 可能是最精简的Android6.0运行时权限处理方式,支持Rationale提示...
  2. Experimental Educational Round: VolBIT Formulas Blitz-R. Game
  3. MT4/MQL4入门到精通外汇EA自动交易教程-MQL语言常用函数
  4. 计算机在军事的应用论文,信息技术论文3000字【军事信息技术论文】
  5. linux无线网卡连不上网,Ubuntu 16.04下无线网卡无法正常连网
  6. 一份很全的金融风控面试题
  7. FLANN库 使用介绍
  8. 测试计划编写7要素?(6W1H)
  9. C#完成简单的生日祝福
  10. 商务文件合同OCR识别原理