最佳答案
我试图添加日志到一个使用 Flask 的 Web 应用程序。
当使用内置服务器(即 python3 server.py
)托管时,日志记录可以正常工作。
重现这个问题的最简单的代码是:
#!/usr/bin/env python
import 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 的日志文件中仍然没有“日志消息”消息的踪迹。
Gunicorn 是使用 pip3 install gunicorn
安装的,所以不应该与 Python 版本有任何不匹配。
发生什么事了?