python 日志增量抓取实现方法
实例如下所示:
importtime importpickle importos importre classLogIncScaner(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 defscan(self): seek=self._get_seek() file_mtime=os.path.getmtime(self.log_file) iffile_mtime<=seek['time']: print'filemtimenotchangesincelastscan' seek['time']=file_mtime self._dump_seek(seek) return[] file_size=os.path.getsize(self.log_file) iffile_size<=seek['position']: print'filesizenotchangesincelastscan' seek['position']=file_size self._dump_seek(seek) return[] print'filechanged,starttoscan' matchs=[] withopen(self.log_file,'rb')aslogfd: logfd.seek(seek['position'],os.SEEK_SET) formatchinre.finditer(self.reg_ex,logfd.read()): matchs.append(match) seek={'time':time.time(),'position':logfd.tell()} printseek self._dump_seek(seek) returnmatchs def_get_seek(self): seek={'time':time.time(),'position':0} ifos.path.exists(self.seek_file): withopen(self.seek_file,'rb')asseekfd: try: seek=pickle.load(seekfd) except: pass printseek returnseek def_dump_seek(self,seek): withopen(self.seek_file,'wb')asseekfd: pickle.dump(seek,seekfd) defreset_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() whileTrue: matchs=scaner.scan() formatchinmatchs: print'fondat:'+match.group(1)+'content:'+match.group(0) time.sleep(5)
以上这篇python日志增量抓取实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。