使用Python+Flask实现日志在Web网页实时更新显示的过程可以分为以下几步:
- 安装Flask和WebSocket
在命令行中执行以下命令,安装Flask和WebSocket:
pip install flask
pip install flask-socketio
- 创建Flask应用
创建一个Python脚本文件,命名为app.py,代码如下:
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
socketio.run(app)
- 创建HTML模板
在templates目录下创建一个名为index.html的HTML文件,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实时日志更新显示</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
</head>
<body>
<h1>实时日志更新显示</h1>
<div id="log" style="height: 300px; overflow-y: scroll; border: 1px solid #ddd; padding: 10px;"></div>
<script type="text/javascript">
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function() {
console.log('Connected!');
});
socket.on('new_log', function(data) {
$('#log').append(data + '<br>');
$("html, body").animate({ scrollTop: $(document).height() }, "slow");
});
</script>
</body>
</html>
- 实现日志功能
在Python脚本文件中添加以下代码,用于生成日志并实时更新网页:
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(message)s')
@socketio.on('connect')
def test_connect():
emit('new_log', {'data': 'Client connected'})
@socketio.on('disconnect')
def test_disconnect():
emit('new_log', {'data': 'Client disconnected'})
def log():
logger.debug('Debug message')
logger.info('Info message')
logger.warn('Warn message')
logger.error('Error message')
logger.critical('Critical message')
if __name__ == '__main__':
socketio.run(app)
while True:
log()
socketio.emit('new_log', {'data': 'New log'})
这样就完成了Python+Flask实现日志在Web网页实时更新显示的攻略。
下面是两个示例:
示例1:使用Python+Flask实现实时显示系统日志
在上述代码基础上,将log函数修改为读取系统日志的代码:
import subprocess
import re
def log():
p = subprocess.Popen(['tail', '-n', '10', '/var/log/syslog'], stdout=subprocess.PIPE)
output, err = p.communicate()
for line in output.splitlines():
if re.search(b'error|critical|fail', line.lower()):
socketio.emit('new_log', {'data': line.decode()})
这样,就可以实现在web界面上实时显示系统日志信息。
示例2:使用Python+Flask实现实时显示Docker容器日志
在上述代码基础上,将log函数修改为读取Docker容器日志的代码:
import subprocess
def log():
p = subprocess.Popen(['docker', 'logs', '--tail', '10', 'container_name'], stdout=subprocess.PIPE)
output, err = p.communicate()
for line in output.splitlines():
socketio.emit('new_log', {'data': line.decode()})
这样,就可以实现在web界面上实时显示Docker容器日志信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用python+Flask实现日志在web网页实时更新显示 - Python技术站