在Plotly Dash中显示后端日志消息

时间:2019-03-25 02:57:54

标签: python logging plotly-dash

我目前正在使用Plotly Dash开发基于JVM(Kotlin)服务的仪表板。本质上,JVM服务将消息(通过ZMQ)推送到我的Python Dash脚本,该脚本又更新了一系列实时图表。

除了图表之外,我还想在Dash仪表板中显示服务的日志消息(它们当前显示在控制台中并写入文件中)。我可以轻松地修改JVM应用程序/ Python脚本以通过ZMQ发送/接收消息,但是我找不到能够实时显示这些消息的Dash组件。

由于消息的吞吐量非常高(每秒几十条),我希望能够按级别(信息,警告等)和其他条件(正则表达式为理想)。我阅读了Dash文档,但找不到适合我需求的组件。有什么方法可以在Dash中实现?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我不熟悉您如何在脚本中接收消息,但是您要使用的内容涉及:

  • 普通html.Div(id='log-div',style=dict(height='300px',overflow='auto'))只是可滚动的空div

  • 一个类似于

  • 的回调函数
@app.callback(
  Output('log-div','children'),
  [Input('log-div','children')
)
def log_content(old_logs):
    # wait for whatever time interval you want between updating the messages
    time.sleep(2)

    # take in the messages through some function
    messages = receive_messages_function()

    # filter the messages here
    messages = filter_messages_function()

    # old_logs is a list of the old messages, with each line being a 
    # separate div (to separate the messages, this can be done in many different ways).
    # So what you do is add the new filtered messages to the old filtered messages
    # Note - this assumes the messages are in a list of some sort; it doesn't matter
    # as the concept is the same - just add the new messages after the old ones
    messages = old_logs + messages

    return messages   

这可以工作,但是您必须确保sleep()不会妨碍应用程序其余部分的工作(即,将threaded=True传递给app.run_server ()或配置要线程化的服务器对象。

希望这会有所帮助!提出任何问题/反馈意见,我很乐意答复。