最近为了分析程序运行情况,以及得出机器的最高性能。需要从日志文件中得出程序输出、效率;为了使用数据直观,工作方便,于是使用了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. jmeter测试工具
  2. 元旦是星期天,春节是1.29,也是星期天哦,祝贺大家节日了!
  3. 不同局域网内经Internet的P2P通信技术总结
  4. Spring Boot——集成七牛云OSS对象存储SDK解决方案
  5. oracle驱动maven报错_在Maven仓库中添加Oracle JDBC驱动
  6. 在此iphone上尚未受信任_来自苹果这样的电话千万别接,不然 iPhone 没了...
  7. 快手直播伴侣因计算机丢失,在电脑上安装快手直播伴侣,却说因为计算机丢失MSVCP140.DOLL怎么办???...
  8. 团队作业4——第一次项目冲刺(Alpha版本) Day1
  9. mysql limit 1 10000_Mysql面试题,优化:SELECT * FROM user LIMIT 10000,1.
  10. php使用函数封装去除空格,去除php注释和去除空格函数分享_PHP教程
  11. java变量的声明和数据类型
  12. Atitit 软件开发体系法规大全v2.docx Atitit 软件开发体系大全 目录 1. 基本法(类似宪法) 1 2. 行政法 1 3. 流程法民商法 2 3.1. Ui提升法 2 3.2. 功
  13. k3 审核流程图_金蝶K3操作流程图详解(doc 64页)
  14. 工业相机像元与像素之间的关系
  15. Maven Failsafe 插件
  16. Material Design系列之BottomSheet详解
  17. 使用7号电池的科学计算机,新奇:可以用USB充电的5号、7号电池
  18. 如何下载广东省卫星地图高清版大图
  19. 一文读懂 Traefik v 2.6 企业版新特性
  20. 字符串拼接:语言C#(CSharp)

热门文章

  1. ural 1009. K-based Numbers - dp
  2. TCP_IP详解学习笔记
  3. Spring5注解编程基础组件
  4. Java面向对象笔记第1天(达内Java课程)
  5. jdk1.8 hashMap的put学习
  6. 盘点 Oracle 11g 中新特性带来的10大性能影响
  7. 广州一高层住宅拍出亿元
  8. ISO 国 际 标 准
  9. 3Dsmax---制作地球变成苹果
  10. 计算机考研211大学排名,计算机考研:4所好考的211院校!