python 日志增量抓取实现方法
作者:码农少抽烟 时间:2022-01-08 15:43:07
实例如下所示:
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
标签:python,抓取,日志,增量
0
投稿
猜你喜欢
Vue2单一事件管理组件通信
2024-05-29 22:30:03
SQL Server并行操作优化避免并行操作被抑制而影响SQL的执行效率
2024-01-23 10:55:50
python实现维吉尼亚算法
2023-07-02 01:28:17
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2021-07-04 08:53:54
Python中根据时间自动创建文件夹的代码实现
2023-07-06 02:42:01
如何获取SQL Server数据库元数据的方法
2009-01-19 14:00:00
SQLServer 使用ADSI执行分布式查询ActiveDorectory对象
2024-01-18 11:22:18
了解不常见但是实用的Python技巧
2022-10-12 09:07:35
Redis数据库基础与ASP.NET Core缓存实现
2024-01-26 18:19:09
sklearn-SVC实现与类参数详解
2023-09-04 18:10:43
使用webpack-dev-server处理跨域请求的方法
2024-04-29 13:44:19
Python 中 sorted 如何自定义比较逻辑
2021-09-16 23:43:37
修复 jQuery 中 isFunction 方法的 BUG
2010-01-25 12:05:00
Python基于opencv实现的简单画板功能示例
2021-05-06 20:04:37
Python如何优雅删除字符列表空字符及None元素
2023-10-26 19:17:00
基于Python的Houdini插件开发过程详情
2023-11-28 17:28:02
Vue express鉴权零基础入门
2024-05-13 09:11:29
Python列表解析配合if else的方法
2021-10-08 06:50:11
关于python处理大型json文件的方法
2023-09-24 12:47:47
python各种excel写入方式的速度对比
2021-04-23 22:30:15