Gunicorn 不记录错误和打印语句

Gunicorn not logging errors and print statements

我正在尝试 运行 使用 gunicorn 的烧瓶应用程序,并记录它的错误和对文件的访问。 访问日志工作正常,但问题出现在错误日志文件中。

错误日志文件设法将错误记录到日志文件中,但一两天后它不再在文件中附加任何错误或打印语句。

以下是我的gunicorn服务配置

[Unit]
Description=Gunicorn service
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/gunicorn3 --workers 3 --capture-output --log-level debug --access-logfile /logs/access.log --error-logfile /logs/error.log --bind unix:flaskapp.sock -m 007 app:app --reload

[Install]
WantedBy=multi-user.target

我无法找到导致相同问题的原因。 我删除了该文件,它运行良好了一段时间,然后导致了同样的错误。

您可以使用 python 日志记录 class 并在 app.py 中定义应用记录器。您还需要在应用程序中设置 gunicorn 日志记录器。

import logging
from flask import Flask, jsonify

app = Flask(__name__)

if __name__ != '__main__':
    gunicorn_logger = logging.getLogger('gunicorn.error')
    app.logger.handlers = gunicorn_logger.handlers
    app.logger.setLevel(gunicorn_logger.level)

@app.route('/')
def default_route():
    """Default route"""
    app.logger.debug('this is a DEBUG message')
    app.logger.info('this is an INFO message')
    app.logger.warning('this is a WARNING message')
    app.logger.error('this is an ERROR message')
    app.logger.critical('this is a CRITICAL message')
    return jsonify('hello world')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=True)