两个 Flask 实例,一条控制台消息

Two Flask Instances, One Console Message

我在 LAMP 服务器上有两个 flask 运行 实例。两者都在自己的虚拟环境中。

我注意到,如果我同时拥有两个 运行 不同的非 root 用户,从 "web" 的角度来看,它们工作正常但是,我只从一个实例中获得控制台消息/调试。

有没有一种方法可以同时显示控制台消息或将此类输出路由到文件?

Flask has a pretty great tutorial when it comes to application logging

我个人的建议是使用这样的东西

if not app.debug:
    import logging
    from themodule import TheHandlerYouWant
    file_handler = logging.handlers.RotatingFileHandler(
         filename="/var/log/<flask_instance_name>",
         maxBytes=500000000,
         backupCount=4)
    file_handler.setLevel(logging.WARNING)
    app.logger.addHandler(file_handler)

在这种情况下,每个文件的作用超过 500 Mb,一次可以有 5 个副本,500 Mb * 5 files = 2.5 Gb * 2 instances = 5 Gb 总潜在 space 利用率仅在日志上。我强调这些数字是因为它们很重要。

稍微复杂但总体上更好的方法是使用 NTEventLog 或 SysLog。这些更复杂,因为它们需要更改系统。例如,SysLog 要求 UDP 端口 514 处于打开状态并处于侦听状态

if not app.debug:
    import logging
    from themodule import TheHandlerYouWant
    file_handler = logging.handlers.SysLogHandler(address="Instance address")
    file_handler.setLevel(logging.WARNING)
    app.logger.addHandler(file_handler)

重要的是每个 flask 应用程序的地址或文件名参数都不同。

在您实例化记录器之后,您可以在 flask 中应用程序范围内的任何地方调用记录器。现在您可以明确控制日志消息的去向。

@app.route('/', methods=['GET', 'POST'])
def home_page():
    app.logger.debug("I'm a debugging message going to file {}!".format(
        app.logger.baseFilename))
    return "This is a test home page."