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聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
Python实现的微信支付方式总结【三种方式】
Apr 13 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 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
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
PHP类型约束用法示例
2016/09/28 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
javascript开发中因空格引发的错误
2010/11/08 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
js利用iframe实现选项卡效果
2020/08/09 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
在Python中处理时间之clock()方法的使用
2015/05/22 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
internal修饰符起什么作用
2013/12/16 面试题
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
给老婆道歉的话
2015/01/20 职场文书
超市督导岗位职责
2015/04/10 职场文书
教师节随笔
2015/08/15 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
python神经网络Xception模型
2022/05/06 Python