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日志增量抓取实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。