在更新时显示日志文件的内容

新手上路,请多包涵

我有外部程序,例如 ffmpeg 和 gstreamer 在后台运行并写入日志文件。我想用我的 Flask 应用程序显示此日志的内容,以便用户可以观看日志更新,就像 tail -f job.log 在终端中所做的那样。

我尝试使用 <object data="/out.log" type="text/plain"> 指向日志文件,但未能显示数据,或者浏览器告诉我我需要一个插件。

如何在 HTML 页面中嵌入和更新日志文件?

原文由 Sina Sh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 244
2 个回答

使用 Flask 视图从文件中持续读取并流式传输响应。使用 JavaScript 从流中读取并更新页面。此示例发送整个文件,您可能希望在某个时候截断该文件以节省带宽和内存。此示例在读取之间休眠以减少无限循环的 cpu 负载并允许其他线程有更多活动时间。

 from time import sleep
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/stream')
def stream():
    def generate():
        with open('job.log') as f:
            while True:
                yield f.read()
                sleep(1)

    return app.response_class(generate(), mimetype='text/plain')

app.run()

 <pre id="output"></pre>
<script>
    var output = document.getElementById('output');

    var xhr = new XMLHttpRequest();
    xhr.open('GET', '{{ url_for('stream') }}');
    xhr.send();

    setInterval(function() {
        output.textContent = xhr.responseText;
    }, 1000);
</script>

这几乎与 这个答案 相同,它描述了如何流式传输和解析消息,尽管永远从外部文件读取足够新颖,可以成为它自己的答案。这里的代码更简单,因为我们不关心解析消息或结束流,只关心永远拖尾文件。

原文由 davidism 发布,翻译遵循 CC BY-SA 3.0 许可协议

我正在使用来自 npm 的 frontail 包。

 npm i frontail -g
frontail /var/log/syslog

访问 http://127.0.0.1:9001 查看日志

来源:https: //github.com/mthenw/frontail

这可能不是问题的确切答案(嵌入 html 页面),但它解决了许多用户的问题,他们只专门寻找

在更新时显示日志文件的内容

原文由 Ayushya 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题