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 相关文章推荐
Python中生成器和yield语句的用法详解
Apr 17 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
如何使用python代码操作git代码
Feb 29 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 Python
Python机器学习之底层实现KNN
Jun 20 Python
总结Python连接CS2000的详细步骤
Jun 23 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
javascript实现的listview效果
2007/04/28 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python中IPYTHON入门实例
2015/05/11 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
python super用法及原理详解
2020/01/20 Python
python删除某个目录文件夹的方法
2020/05/26 Python
python如何查看网页代码
2020/06/07 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
Delphi笔试题
2016/11/14 面试题
电子商务专业个人的自我评价
2013/11/19 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
促销活动方案模板
2014/02/24 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
督导岗位职责范本
2015/04/10 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL