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基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
pip命令无法使用的解决方法
Jun 12 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python3如何使用多线程升程序运行速度
Aug 11 Python
Python基于gevent实现文件字符串查找器
Aug 11 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
python异步的ASGI与Fast Api实现
Jul 16 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/11/25 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php实现通过ftp上传文件
2015/06/19 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
PHP fopen函数用法实例讲解
2019/02/15 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
js格式化时间的方法
2015/12/18 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
python实现五子棋游戏(pygame版)
2020/01/19 Python
详解Python IO口多路复用
2020/06/17 Python
什么是python的函数体
2020/06/19 Python
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
物流仓储实习自我鉴定
2013/09/25 职场文书
小学教师事迹材料
2014/01/13 职场文书
上班离岗检讨书
2014/01/27 职场文书
英文求职信范文
2014/05/23 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
股东出资证明书范例
2014/10/04 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
Python数据分析之pandas函数详解
2021/04/21 Python
python异常中else的实例用法
2021/06/15 Python
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL