在烧瓶应用程序中将日志记录设置代码放在哪里?
Where to put logging setup code in a flask app?
我正在编写我的第一个 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 网络服务器启动。我在 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?
请帮忙:我必须把这段代码放在哪里?
更新:根据 davidism 的评论和我得到的第一个答案,我认为当前简单形式的应用程序不适合我的要求。我将按照此处的建议修改它以使用不同的配置数据集:http://flask.pocoo.org/docs/0.10/config/#development-production。如果我的应用程序更大,我会按照 pech0rin 的回答。
更新 2:我认为这里的关键是环境变量应该控制应用程序的配置方式。
我在 create_app
函数中设置日志记录配置方面取得了很大成功。这使用了application factory pattern。这允许您传入一些参数或配置 class。然后使用您的参数专门创建应用程序。
这允许您初始化应用程序、设置日志记录,并在应用程序被发送回 运行 之前执行任何您想执行的操作。
例如:
def create_app(dev=False):
app = Flask(__name__)
if dev:
app.config['DEBUG'] = True
else:
...
app.logger.addHandler(file_handler)
return app
这在生产环境中对我来说效果很好。 YMMV
我正在编写我的第一个 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 网络服务器启动。我在 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?
请帮忙:我必须把这段代码放在哪里?
更新:根据 davidism 的评论和我得到的第一个答案,我认为当前简单形式的应用程序不适合我的要求。我将按照此处的建议修改它以使用不同的配置数据集:http://flask.pocoo.org/docs/0.10/config/#development-production。如果我的应用程序更大,我会按照 pech0rin 的回答。
更新 2:我认为这里的关键是环境变量应该控制应用程序的配置方式。
我在 create_app
函数中设置日志记录配置方面取得了很大成功。这使用了application factory pattern。这允许您传入一些参数或配置 class。然后使用您的参数专门创建应用程序。
这允许您初始化应用程序、设置日志记录,并在应用程序被发送回 运行 之前执行任何您想执行的操作。
例如:
def create_app(dev=False):
app = Flask(__name__)
if dev:
app.config['DEBUG'] = True
else:
...
app.logger.addHandler(file_handler)
return app
这在生产环境中对我来说效果很好。 YMMV