我在 Windows 上的 Apache 2.2 实例上部署了一个 Flask 应用程序,一切运行良好。
然后我决定在我的应用程序中实现日志记录并阅读 the Flask docs :我决定使用文件记录器,它生成一个日志文件,其中包含我期望的所有日志消息……当我使用内置的 Flask 网络服务器执行应用程序时,就会发生这种情况。 相关代码如下:
if __name__ == '__main__':
#Create a rotating logfile for the application
handler = RotatingFileHandler('myapp.log', maxBytes=10000, backupCount=1)
handler.setLevel(logging.INFO)
handler.setFormatter(Formatter('[%(levelname)s][%(asctime)s] %(message)s'))
app.logger.setLevel(logging.INFO)
app.logger.addHandler(handler)
#Run the app
app.run(host='0.0.0.0', port=5000)
但是当我将应用程序部署到 Apache 时,我的应用程序不会创建/写入该日志文件。日志消息甚至没有写在标准的 Apache 日志文件中,正如人们所期望的那样,因为 Apache 对我的日志框架一无所知。
有没有办法强制我的应用程序在通过 Apache 执行时也创建日志文件?让 Apache 将我的应用程序日志写入另一个通过其配置确定的文件也是可以接受的。
提前致谢!
最佳答案
您在 if __name__ == '__main__'
中拥有完整的日志记录设置代码,它仅在您使用 Flask 开发服务器时运行。在您的 Apache 服务器上显然不是这种情况。简短的回答是:
将整个日志记录代码移到 if 条件之前,您应该没问题。
您还可以将代码放在 if block 之后的 else
block 中,以在开发时禁用日志记录(因为无论如何您都在使用 Debug模式)。但实际上我会将特定于服务器的内容放入不属于应用程序的特定于服务器的文件中。
所以你有一个生产“启动器”:
from myapp import app
# logging stuff
# app.logger.setHandler(...)
# more configuration
# do some stuff for apache (?)
还有一个调试“启动器”:
from myapp import app
app.run(debug=True)
关于python - Flask 应用程序日志文件不是在 Apache 部署下编写的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250396/