在由Gunicorn托管时,为什么Flask应用程序不创建任何日志?
我正在尝试将日志添加到使用Flask的Web应用程序中。
使用内置服务器(即python3 server.py
)托管时,日志记录有效。使用Gunicorn托管时,不会创建日志文件。
重现问题的最简单代码是以下代码:
#!/usr/bin/env pythonimport logging
from flask import Flask
flaskApp = Flask(__name__)
@flaskApp.route('/')
def index():
flaskApp.logger.info('Log message')
print('Direct output')
return 'Hello World\n'
if __name__ == "__main__":
logHandler = logging.FileHandler('/var/log/demo/app.log')
logHandler.setLevel(logging.INFO)
flaskApp.logger.addHandler(logHandler)
flaskApp.logger.setLevel(logging.INFO)
flaskApp.run()
使用以下命令调用该应用程序:
gunicorn server:flaskApp -b :80 -w 4 --access-gfile /var/log/demo/access.log
--error-logfile /var/log/demo/error.log
当对网站主页进行请求时,将发生以下情况:
我收到预期的HTTP 200“ Hello World \ n”作为响应。
中有该请求的痕迹
/var/log/demo/access.log
。/var/log/demo/error.log
保持不变(只有启动事件)。终端中有“直接输出”行。
没有
“ /var/log/demo/app.log”
。如果在启动应用程序之前创建文件,则不会修改该文件。
注意:
每个人/var/log/demo都可以访问(读取,写入,执行)该目录,因此这不是权限问题。
如果我添加StreamHandler为第二个处理程序,则无论是在终端还是在Gunicorn日志文件中,都仍然没有“ Log message”消息的踪迹。
使用来安装Gunicorn pip3 install gunicorn,因此与Python版本应该不会有任何不匹配。
发生了什么?
回答:
使用时,python3 server.py
你正在运行server3.py脚本。
使用时,gunicorn server:flaskApp ...
你正在运行gunicorn启动脚本,然后将其导入模块server
并flaskApp在该模块中查找变量。
由于server.py
正在导入,因此__name__var
将包含"server"
,而不包含,"__main__"
因此你的日志处理程序设置代码未在运行。
你可以简单地将日志处理程序设置代码移到该if __name__ == "__main__"
:节之外。但是,请确保你留在那儿,flaskApp.run()因为你不希望在进口金枪鱼时就那样进行server
。
以上是 在由Gunicorn托管时,为什么Flask应用程序不创建任何日志? 的全部内容, 来源链接: utcz.com/qa/432738.html