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

时间:2015-03-26 23:13:47

标签: python flask

我在LAMP服务器上运行了两个烧瓶实例。两者都在他们自己的虚拟环境中。

我注意到,如果我同时在非root用户上同时运行,那么从“Web”角度来看它们工作得很好但是,我只从一个用户那里得到控制台消息/调试实例。

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

1 个答案:

答案 0 :(得分:1)

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。我强调这些数字是因为它们很重要。

稍微复杂但总体上更好的方法是使用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)

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

在您实例化记录器之后,然后在应用程序在范围内的任何位置,您可以通过这种方式调用记录器。现在,您可以明确控制日志消息的去向。

@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."