python写一个日志系统可以在web页面类似tail形式中查看实时日志
以下是一个简单的Python日志系统,可以实时查看日志:
import logging
import time
from flask import Flask, render_template
app = Flask(__name__)
# 设置日志格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 创建一个日志文件
handler = logging.FileHandler('app.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logging.getLogger('').addHandler(handler)
# 显示日志
@app.route('/')
def index():
return render_template('index.html')
# 实时日志
@app.route('/log')
def log():
def generate():
with open('app.log') as f:
while True:
line = f.readline()
if not line:
time.sleep(1)
continue
yield line
return app.response_class(generate(), mimetype='text/plain')
if __name__ == '__main__':
app.run(debug=True)
在上面的代码中,我们使用Flask框架创建一个Web应用程序。我们使用Python内置的logging模块来记录日志,并在页面上显示实时日志。
我们使用logging.basicConfig()函数来设置日志级别和格式。然后,我们创建一个日志文件并将其添加到logging模块中。
在index()函数中,我们返回一个HTML页面,该页面包含一个JavaScript代码段,它会定期向服务器发送请求以检查是否有新日志消息。如果有新消息,它将在页面上显示出来。
在log()函数中,我们使用yield关键字和Python的生成器来实现实时日志。我们打开日志文件并使用readline()函数读取每一行。如果没有新行,我们使用time.sleep()函数暂停1秒钟,然后继续读取。如果有新行,我们使用yield将其发送到客户端。
我们将generate()函数作为响应传递给app.response_class()函数,该函数将其包装在一个响应对象中,并将响应的MIME类型设置为text/plain。这意味着我们可以在页面上显示纯文本日志。
最后,我们使用app.run()函数启动应用程序。我们将debug参数设置为True,这意味着我们可以在开发环境中轻松地调试应用程序。
原文地址: https://www.cveoy.top/t/topic/bsTN 著作权归作者所有。请勿转载和采集!