将记录设置代码放在烧瓶应用程序中的位置?

时间:2016-03-08 14:15:21

标签: flask wsgi

我正在编写我的第一个Flask应用程序。应用程序本身运行良好。我刚刚有一个关于登录生产模式的新手问题。

基本结构:

app/
app/templates/
app/static
config.py
flask/... <- virtual env with flask + extensions
run.py

应用程序由run.py脚本启动:

#!flask/bin/python

import os.path
import sys

appdir = os.path.dirname(os.path.abspath(__file__))
if appdir not in sys.path:
    sys.path.insert(1, appdir)

from app import app as application

if __name__ == '__main__':
    application.run(debug=True)

并直接启动或从Apache 2.4 Web服务器启动。我在apache配置中有这些行:

WSGIPythonHome /usr/local/opt/app1/flask
WSGIScriptAlias /app1 /usr/local/opt/app1/run.py

在前一种情况下,debug=True是开发所需的全部内容。

我还想为后一种情况进行一些日志记录,即在生产服务器上的Apache下运行时。以下是Flask文档的建议:

if not app.debug:
    import logging
    from themodule import TheHandlerYouWant
    file_handler = TheHandlerYouWant(...)
    file_handler.setLevel(logging.WARNING)
    app.logger.addHandler(file_handler)

它需要一些自定义,但这就是我想要的 - 没有设置app.debug标志的情况说明。这里也给出了类似的建议: How do I write Flask's excellent debug log message to a file in production?

请帮忙:我在哪里放这个代码?

更新:根据大卫的评论和我得到的第一个答案,我认为当前简单形式的应用程序不适合我的要求。我将修改它以使用此处推荐的不同配置数据集:http://flask.pocoo.org/docs/0.10/config/#development-production。如果我的申请量较大,我会按照pech0rin的答案。

UPDATE2:我认为这里的关键是环境变量应该控制应用程序的配置方式。

1 个答案:

答案 0 :(得分:1)

我在using int_tree_t = boost::make_recursive_variant < int, std::vector<boost::recursive_variant_>>::type; ↑↑↑↑↑↑ 函数中设置日志记录配置方面取得了很大成功。这使用application factory pattern。这允许您传入一些参数或配置类。然后使用您的参数专门创建应用程序。

这允许您在将应用程序发回运行之前初始化应用程序,设置日志记录以及执行您想要执行的任何操作。

例如:

create_app

这在我的生产环境中非常有效。 YMMV