显示更新日志文件的内容

Sin*_* Sh 17 javascript python stream flask

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

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

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

dav*_*ism 20

使用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()
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

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


Ayu*_*hya 8

我正在使用frontailnpm 中的包。

npm i frontail -g
frontail /var/log/syslog
Run Code Online (Sandbox Code Playgroud)

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

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

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

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