python 日志增量抓取实现方法


本文摘自php中文网,作者不言,侵删。

下面为大家分享一篇python 日志增量抓取实现方法,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧

实例如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

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日志的配置文件路径问题

详解python日志打印和写入并发实现代码

以上就是python 日志增量抓取实现方法的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python通过公共键对字典列表排序(利用itemgetter函数)

Python怎么安装?(教程图解)

Python中如何从列表中删除none值

Python中自定义函数的保留字是

Python的快速排序方法

Python命令行参数是什么

Python学习必备知识汇总

Python实现校园网自动登录

Python绝对值怎么计算

Python中subprocess模块级方法的介绍(附代码)

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...