这是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),如果设置
现在,我希望将我的应用程序日志与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/复制)
但这是问题所在
如何解决此问题?对应用程序代码进行哪些更改? 有一个可行的修正程序,但我正在寻找更好的解决方案。 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配置文件中进行更改,而不用输入应用程序代码。