python 日志增量抓取实现方法


Posted in Python onApril 28, 2018

实例如下所示:

import time
import pickle
import os
import re
class LogIncScaner(object):
  def __init__(self,log_file, reg_ex,seek_file='/tmp/log-inc-scan.seek.temp'):
    self.log_file = log_file
    self.reg_ex = reg_ex
    self.seek_file = seek_file
  def scan(self):
    seek = self._get_seek()
    file_mtime = os.path.getmtime(self.log_file)
    if file_mtime <= seek['time']:
      print 'file mtime not change since last scan'
      seek['time'] = file_mtime
      self._dump_seek(seek)
      return []
    file_size = os.path.getsize(self.log_file)
    if file_size <= seek['position']:
      print 'file size not change since last scan'
      seek['position'] = file_size
      self._dump_seek(seek)
      return []
    print 'file changed,start to scan'
    matchs = []
    with open(self.log_file, 'rb') as logfd:
      logfd.seek(seek['position'],os.SEEK_SET)
      for match in re.finditer(self.reg_ex, logfd.read()):
        matchs.append(match)
      seek = {'time':time.time(),'position': logfd.tell()}
      print seek
      self._dump_seek(seek)
    return matchs
  def _get_seek(self):
    seek = {'time':time.time(),'position':0}
    if os.path.exists(self.seek_file):
      with open(self.seek_file,'rb') as seekfd:
          try:
            seek = pickle.load(seekfd)
          except:
            pass
    print seek
    return seek
  def _dump_seek(self, seek):
    with open(self.seek_file,'wb') as seekfd:
      pickle.dump(seek,seekfd)
  def reset_seek(self):
    self._dump_seek({'time':time.time(),'position':0})
if __name__ == "__main__":
  scaner = LogIncScaner('/var/log/messages',r'(\w+ \d+ \d+:\d+:\d+) .+?exception')
  scaner.reset_seek()
  while True:
    matchs = scaner.scan()
    for match in matchs:
      print 'fond at:' + match.group(1) + ' content:' + match.group(0)
    time.sleep(5)

以上这篇python 日志增量抓取实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用IPython来操作Docker容器的入门指引
Apr 08 Python
Python下载网络小说实例代码
Feb 03 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
对pandas的行列名更改与数据选择详解
Nov 12 Python
Python面向对象之类和对象实例详解
Dec 10 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
python 装饰器的基本使用
Jan 13 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 Python
Django 使用logging打印日志的实例
Apr 28 #Python
python实现log日志的示例代码
Apr 28 #Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 #Python
Python之读取TXT文件的方法小结
Apr 27 #Python
如何利用python查找电脑文件
Apr 27 #Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 #Python
python Spyder界面无法打开的解决方法
Apr 27 #Python
You might like
php print EOF实现方法
2009/05/21 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
Python中tell()方法的使用详解
2015/05/24 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
解决yum对python依赖版本问题
2019/07/05 Python
python正则-re的用法详解
2019/07/28 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
农业资源与环境专业自荐信范文
2013/12/30 职场文书
工作决心书
2014/03/11 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
企业宣传口号
2014/06/12 职场文书
送给客户微信问候语!
2019/07/04 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python