本文介绍如何使用Python动态监控程序日志的内容,这里的动态指的是日志文件不断的追加新的日志内容,动态监控是指监控日志新追加的日志内容
日志文件一般是按天产生,则通过在程序中判断文件的产生日期与当前时间,更换监控的日志文件
程序只是简单的示例一下,监控test1.log 10秒,转向监控test2.log
程序监控使用是linux的命令tail -f来动态监控新追加的日志,
Github上有一个项目,使用Python实现的类似unix系统的tail -f(Unix tail follow implementation in Python) 项目地址是:https://github.com/kasun/python-tail
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
|
#!/usr/bin/python
# encoding=utf-8
# Filename: monitorLog.py
import
os
import
signal
import
subprocess
import
time
logFile1
=
"test1.log"
logFile2
=
'test2.log'
#日志文件一般是按天产生,则通过在程序中判断文件的产生日期与当前时间,更换监控的日志文件
#程序只是简单的示例一下,监控test1.log 10秒,转向监控test2.log
def
monitorLog
(
logFile
)
:
print
'监控的日志文件 是%s'
%
logFile
# 程序运行10秒,监控另一个日志
stoptime
=
time
.
strftime
(
'%Y-%m-%d %H:%M:%S'
,
time
.
localtime
(
time
.
time
(
)
+
10
)
)
popen
=
subprocess
.
Popen
(
'tail -f '
+
logFile
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
,
shell
=
True
)
pid
=
popen
.
pid
print
(
'Popen.pid:'
+
str
(
pid
)
)
while
True
:
line
=
popen
.
stdout
.
readline
(
)
.
strip
(
)
# 判断内容是否为空
if
line
:
print
(
line
)
# 当前时间
thistime
=
time
.
strftime
(
'%Y-%m-%d %H:%M:%S'
,
time
.
localtime
(
time
.
time
(
)
)
)
if
thistime
>=
stoptime
:
# 终止子进程
popen
.
kill
(
)
print
'杀死subprocess'
break
time
.
sleep
(
2
)
monitorLog
(
logFile2
)
if
__name__
==
'__main__'
:
monitorLog
(
logFile1
)
|
收 藏
转载请注明:成长的对话 » Python动态监控日志的内容