python 日志增量抓取实现方法
作者:码农少抽烟 发布时间:2022-01-08 15:43:07
标签:python,抓取,日志,增量
实例如下所示:
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)
来源:https://blog.csdn.net/tiankai517/article/details/50549395


猜你喜欢
- 一、背景先要从 InnoDB 的索引实现说起,InnoDB 有两大类索引:聚集索引 (clustered index)普通索引 (secon
- 1.sort()首先看sort()方法,sort方法只能对列表进行操作,而sorted可用于所有的可迭代对象。a = [1, 5, 3, 4
- 之前写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统。blog系统很简单,只有一个页面,然后麻雀虽小五脏俱全。这里
- #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2020/02/11
- 本文实例为大家分享了python3.5基于TCP实现文件传输的具体代码,供大家参考,具体内容如下服务器代码# _*_ coding:utf-
- 之前有写利用md5方式来做差异备份,但是这种md5方式来写存在以下问题:•md5sum获取有些软连接的MD5值存在问题 •不支持对空目录进行
- 背景pytorch作为深度学习的计算框架正得到越来越多的应用.我们除了在模型训练阶段应用外,最近也把pytorch应用在了部署上.在部署时,
- 1 集合集合可以使用大括号({})或者set()函数进行创建,但是创建一个空集合必须使用set()函数,而不能用{},大括号是用来创建一个空
- 目录前言全局参数持久化写在最后总结参考文档:前言自从 2018 年发布第一版 MySQL 8.0.11 正式版至今,MySQL 版本已经更新
- 其实老早之前就已经做完了,这次稍微改进一下浏览地址:http://www.healdream.com/upload/html/autocli
- 先附上官方文档说明:https://pytorch.org/docs/stable/nn.functional.htmltorch.nn.f
- 无意间碰到的一个大神整理的Python学习思维导图,感觉对初学者理清学习思路大有裨益,非常感谢他的分享。14 张思维导图基础知识数据类型序列
- 一、安装pip install lxml二、创建标签from lxml import etreeroot = etree.Element(&
- exec函数,可以循环定义、赋值多个变量exec ("temp%s=1"%1)这段代码的意思是,让exec执行temp1
- 这篇文章主要介绍了python实现实时视频流播放代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 本博客将为各位分享Python Helium库,其是在 Selenium库基础上封装的更加高级的 Web 自动化工具,它能够通过网页端可见的
- Django根据已有数据库表反向生成models类一. 创建一个Django项目django-admin startproject ‘xxx
- 按照Python官网上的计划,Python3.6正式版期望在2016-12-16号发布,也就是这周五。从去年的5月份开始,Python3.6
- 树状图树状图是显示对象、组或变量之间的层次关系的图表。树状图由在节点或簇处连接的分支组成,它们代表具有相似特征的观察组。分支的高度或节点之间
- 本文实例讲述了mysql实现合并同一ID对应多条数据的方法。分享给大家供大家参考,具体如下:如 :CREATE TABLE `c_class