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中的二进制位运算符
May 13 Python
python删除列表内容
Aug 04 Python
numpy数组拼接简单示例
Dec 15 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
python TK库简单应用(实时显示子进程输出)
Oct 29 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
2012/11/15 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
python标准库OS模块详解
2020/03/10 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
python程序需要编译吗
2020/06/19 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
造型师求职自荐信
2013/09/27 职场文书
表决心的诗句大全
2014/03/11 职场文书
检讨书范文大全
2015/05/07 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis