代码目标: 实时监控日志文件改变(如Unix ‘tail -f’)。
准备: 日志文件的生成
# logging模块主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。
import logging
import random
# 日志记录的基本配置
logging.basicConfig(
level=logging.DEBUG, # 控制台打印的日志级别
filename='message.log', # 日志文件位置
filemode='a', # 写入文件的模式,a是追加模式,默认是追加模式
# 日志格式
format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
)
# 随机写入100条日志信息
infos = ["Network start success", 'Vsftpd Start Sucess', 'Httpd Configure Success']
for count in range(100):
logging.info(random.choice(infos))
代码生成的日志文件如下:
代码
为了实时监控日志文件改变(如Unix ‘tail -f’), 编写代码如下:
# tail.py
# A generator that follows a log file like Unix 'tail -f'.
# Note: To see this example work, you need to apply to
# an active server log file.
import time
def follow(fp):
"""
实时监控文件对象的内容,如果修改,实时打印或者做其他处理
:param fp: 文件对象
:return:
"""
# 移动文件指针到文件最后
fp.seek(0,2) # Go to the end of the file
while True:
# 读取文件的一行内容
line = fp.readline()
if not line:
time.sleep(0.1) # Sleep briefly
continue
yield line
# Example use
if __name__ == '__main__':
logfile = open('message.log')
for line in follow(logfile):
print(line.strip(), )
运行代码时, 在当前目录自己创建一个日志文件message.log,不断写入日志文件, 看是否能检测到日志文件的改变。 代码执行效果如下: