python - Flask 应用程序日志文件不是在 Apache 部署下编写的

标签 python apache logging flask mod-wsgi

我在 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/

相关文章:

python - 嵌套类实例的有用默认 __repr__

python - Openpyxl load_workbook 和保存时间太长

python - 简单兴趣计算器中不可避免的 while 循环

spring - 没有 servlet 不能自动启动 webapp

python - 通过 RabbitMQ 集中来自 Python 和 NodeJS 的日志

class - 将记录器添加到 Jenkins 管道共享库类

c# - 支持从 VSTO 加载项进行日志记录的最简单方法

python - 当主脚本在子模块中时正确初始化 sys.path

python - 我惊呆了 : weird problem with python and sockets + threads

angularjs - 为我的 angularJS Web 应用程序提供静态内容、nodeJS 还是 apache?