无法在Gunicorn访问日志文件上获取应用程序日志

时间:2020-07-09 16:11:09

标签: python flask logging gunicorn

这是Gunicorn配置文件:

import multiprocessing
certfile="domain.crt"
keyfile="server.key"
bind = "0.0.0.0:8443"
workers = multiprocessing.cpu_count() * 2 + 1
threads = 2
timeout = 300
graceful_timeout = 300
accesslog = "-"
errorlog = "-"
loglevel = "INFO"

根据Gunicorn文档(https://docs.gunicorn.org/en/stable/settings.html#accesslog),如果设置

  1. “ accesslog”的值为“-”,那么所有gunicorn访问日志都将进入stdout。
  2. “错误日志”值设为“-”,那么所有gunicorn错误日志都将转到stderr。

现在,我希望将我的应用程序日志与gunicorn日志保存在同一位置。 因此,我希望我的应用程序日志现在转到stdout(因为在gunicorn配置中,“ accesslog”的值设置为“-”,表示stdout)。

这是当前的应用代码:

from flask import Flask, jsonify

app = Flask(__name__)

if __name__ != '__main__':
    gunicorn_logger = logging.getLogger('gunicorn.error')
    logging.basicConfig(format=LOGGING_FORMAT, datefmt=DATE_FORMAT, level=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')

(从https://trstringer.com/logging-flask-gunicorn-the-manageable-way/复制)

但这是问题所在

  1. 所有这些应用程序日志都重定向到stderr而不是stdout。
  2. 尽管我也应该获取应用程序日志,但我只会在stdout上获取gunicorn访问日志。

如何解决此问题?对应用程序代码进行哪些更改? 有一个可行的修正程序,但我正在寻找更好的解决方案。 hacky修复(Logging stdout to gunicorn access log?): 在应用程序代码中,我可以将记录器配置为:

gunicorn_logger = logging.getLogger('gunicorn.error')
logging.basicConfig(format=LOGGING_FORMAT, datefmt=DATE_FORMAT, level=gunicorn_logger.level, stream=sys.stdout)

这似乎将我的应用程序日志重定向到stdout,但是此解决方案似乎在硬编码流的值。我希望将其链接到gunicorn配置,以便将来将来要将所有日志保存到文件中时,可以直接在gunicorn配置文件中进行更改,而不用输入应用程序代码。

0 个答案:

没有答案