python - Flask:无法让gunicorn 将所有内容记录到文件中

标签 python logging flask

SO 上有几个类似的问题,我已经将它们全部标记为红色,但不知何故我无法使我的gunicorn 日志文件显示我感兴趣的所有信息:

所以,考虑这 3 个相关文件:

运行.py

from app import app


if __name__ == '__main__':
    app.run(
        passthrough_errors=False,
        threaded=True
    )

应用程序/__init__.py

import logging
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('config')

handler = logging.StreamHandler()
handler.setLevel(logging.INFO)

app.logger.addHandler(handler)
app.logger.level = logging.DEBUG
app.logger.handlers.extend(logging.getLogger("gunicorn.info").handlers)

db = SQLAlchemy(app)

import views, models

View .py

@app.before_request
def before_request():
    app.logger.info('Body: %s', request.get_data())
    ...
    ...

运行应用程序的命令:

gunicorn -w 4 run:app --access-logfile /Users/adimian/bla.log \ 
--log-file /Users/mondrian/bla.log --error-log /Users/mondrian/error.log

问题:请求正文不会发送到任何日志文件,而是打印在控制台中。其他所有内容都会转到正确的文件,但正文不会...

我也不想在配置中提供日志文件路径,但它应该通过将其作为命令行参数传递给gunicorn来工作,如我上面的示例所示。

最佳答案

您检查过处理程序是否实际上为空吗? GUnicorn 的记录器是 gunicorn.error,而不是 gunicorn.info。我在我的应用程序中做了类似的事情:

import logging
from flask import Flask

app = Flask(__name__)

root = logging.getLogger()
root.handlers = logging.getLogger('gunicorn.error').handlers
root.setLevel(logging.INFO)
...

这对我来说效果很好;所有日志记录都会发送到gunicorn 错误日志。

关于python - Flask:无法让gunicorn 将所有内容记录到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561877/

相关文章:

python - 模块未找到错误 : No module named 'models'

logging - 哪些是运行程序的最佳 Haskell 库?

java - 如何使用我的日志格式简单地创建我自己的自定义控制台记录器?

python - Pandas Multiindex 选择标准以及列选择标准

python - 如何找出策略迭代的值?

python - 用 pandas 将一年中的一周解析为日期时间对象

ruby - 在模块/类之间共享全局记录器

python - 带有文件夹创建/文件上传的 Flask 奇怪行为

python - 是否可以从另一个进程获取 cv2 帧?

python - 如何使用 Flask-SQLAlchemy 仅选择数据库中的某些列?