一个简易的日志监控的脚本,功能如下:1.windows环境2.当匹配日志关键字时会发出声音,匹配的关键字不同,播放的声音不同3.能做到实时响应
注意:是在win环境下哦
直接上代码吧
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#!/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())
|