Home  >  Article  >  Backend Development  >  Python monitoring logger

Python monitoring logger

高洛峰
高洛峰Original
2016-10-18 09:22:271494browse

A simple log monitoring script with the following functions: 1. Windows environment 2. When the log keyword is matched, a sound will be emitted. Different matching keywords will play different sounds 3. Able to respond in real time

Note: Yes In the win environment

Just upload the code

#!/usr/bin/env python
# encoding: utf-8
   
"""
MonitorLog.py
   
Usage: MonitorLog.py ...
Monitor the log file
   
-f  log file
-h  help info
   
python MonitorLog.py -f C:\monitor.log
   
"""
   
import sys
import os
import getopt
import subprocess
import time
import codecs
import winsound
   
ABSPATH = os.path.dirname(os.path.abspath(__file__))
MONITERCONF = 'moniter_keyword.txt' #utf8 file
   
def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'hf:')
    except getopt.GetoptError, err:
        print str(err)
        print __doc__
        return 1
   
    path = ''
    for k, v in opts:
        if k == '-f':
            path = v
        elif k == '-h':
            print __doc__
            return 0
   
    if not (path and os.path.exists(path)):
        print 'Invalid path: %s' % path 
        print __doc__
        return 2
   
    #命令行元组
    cmd = ('tail', '-f', path)
    print ' '.join(cmd)
    output = subprocess.Popen(cmd, stdout=subprocess.PIPE)
   
    keywordMap = {}
    #加载监控的关键字信息
    with codecs.open(os.path.join(ABSPATH, MONITERCONF), 'r', 'utf8') as f:
        lines = f.readlines()
    for line in lines:
        line = line.strip()
        if not line:
            continue
        keyword, wav = line.strip().split(':')
        keywordMap[keyword] = wav
   
    while True:
        line = output.stdout.readline()
        #process code,得到输出信息后的处理代码
        if not line:
            time.sleep(0.01)
            continue
        line = line.strip().decode('utf8')
        print line
        for keyword in keywordMap:
            if line.find(keyword) > -1:
                winsound.PlaySound(keywordMap[keyword], 
                                   winsound.SND_NODEFAULT)
        #time.sleep(0.01)
    return 0
   
if __name__ == '__main__':
    sys.exit(main())


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn