python 日志增量抓取實(shí)現(xiàn)方法
實(shí)例如下所示:
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 日志增量抓取實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python將多個(gè)py文件和其他文件打包為exe可執(zhí)行文件
這篇文章主要介紹了python將多個(gè)py文件和其他文件打包為exe可執(zhí)行文件,通過(guò)準(zhǔn)備要打包的工程文件展開詳情,需要的小伙伴可以參考一下2022-05-05pyinstaller打包exe程序的步驟和添加依賴文件的實(shí)現(xiàn)
這篇文章主要介紹了pyinstaller打包exe程序的步驟和添加依賴文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02uwsgi+nginx部署Django項(xiàng)目操作示例
這篇文章主要介紹了uwsgi+nginx部署Django項(xiàng)目操作,結(jié)合實(shí)例形式簡(jiǎn)單介紹了uwsgi的概念、原理、安裝、項(xiàng)目創(chuàng)建、配置、調(diào)試運(yùn)行等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12Python Django教程之實(shí)現(xiàn)待辦事項(xiàng)應(yīng)用程序
Django是一個(gè)基于Python Web框架的高級(jí)Web框架,允許快速開發(fā)和干凈,務(wù)實(shí)的設(shè)計(jì)。本文將創(chuàng)建一個(gè)待辦事項(xiàng)應(yīng)用程序,以了解Django的基礎(chǔ)知識(shí),感興趣的可以嘗試一下2022-10-10舉例詳解Python中循環(huán)語(yǔ)句的嵌套使用
這篇文章主要介紹了舉例詳解Python中循環(huán)語(yǔ)句的嵌套使用,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05對(duì)pycharm 修改程序運(yùn)行所需內(nèi)存詳解
今天小編就為大家分享一篇對(duì)pycharm 修改程序運(yùn)行所需內(nèi)存詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python list格式數(shù)據(jù)excel導(dǎo)出方法
今天小編就為大家分享一篇python list格式數(shù)據(jù)excel導(dǎo)出方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10