您的位置:首页 > 编程语言 > Python开发

Python动态监控日志的内容

2016-01-20 17:52 519 查看
本文介绍如何使用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

#!/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, <a href="http://www.ttlsa.com/shell/" title="shell"target="_blank">shell</a>=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)
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)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: