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如何实现excel数据添加到mongodb
Jul 30 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
python求最大连续子数组的和
Jul 07 Python
解决pycharm无法识别本地site-packages的问题
Oct 13 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
python进行文件对比的方法
Dec 24 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
基于python 凸包问题的解决
Apr 16 Python
python中线程和进程有何区别
Jun 17 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
python爬取音频下载的示例代码
Oct 19 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 变量定义方法
2009/06/14 PHP
php 归并排序 数组交集
2011/05/10 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
javascript 面向对象编程 function也是类
2009/09/17 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
再探JavaScript作用域
2014/09/24 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
详解python中的json的基本使用方法
2016/12/21 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python中栈的原理及实现方法示例
2019/11/27 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
十八届三中全会宣传方案
2014/02/21 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
Python代码风格与编程习惯重要吗?
2021/06/03 Python
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis