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实现倒计时的示例
Feb 14 Python
Python基础知识_浅谈用户交互
May 31 Python
Python实现购物车功能的方法分析
Nov 10 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
对python使用http、https代理的实例讲解
May 07 Python
flask中的wtforms使用方法
Jul 21 Python
python实现字符串加密成纯数字
Mar 19 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
python3实现无权最短路径的方法
May 12 Python
Python基础之函数嵌套知识总结
May 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
如何使用PHP中的字符串函数
2006/10/09 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
javascript RadioButtonList获取选中值
2009/04/09 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
python实现列表的排序方法分享
2019/07/01 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
Python模块常用四种安装方式
2020/10/20 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
怎样写好自荐信和推荐信
2013/12/26 职场文书
环保口号大全
2014/06/12 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
MySQL触发器的使用
2021/05/24 MySQL
python用tkinter开发的扫雷游戏
2021/06/01 Python
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript