【问题标题】:Flask application logfile is not written under Apache deploymentFlask 应用程序日志文件未在 Apache 部署下编写
【发布时间】:2013-02-21 10:10:27
【问题描述】:

我在 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 将我的应用程序日志写入通过其配置确定的另一个文件也是可以接受的。

提前致谢!

【问题讨论】:

    标签: python apache logging flask mod-wsgi


    【解决方案1】:

    if __name__ == '__main__' 中有完整的日志设置代码,只有在使用 Flask 的开发服务器时才会运行。在您的 Apache 服务器上显然不是这种情况。简短的回答是:

    将整个日志记录代码移到 if 条件之前,应该没问题。


    您还可以将代码放在 if 块之后的 else 块中,以在开发时禁用日志记录(因为无论如何您都在使用调试模式)。但实际上我会将特定于服务器的内容放在不属于应用程序的特定于服务器的文件中。

    所以你有一个生产“启动器”:

    from myapp import app
    
    # logging stuff
    # app.logger.setHandler(...)
    
    # more configuration
    
    # do some stuff for apache (?)
    

    还有一个调试“启动器”:

    from myapp import app
    app.run(debug=True)
    

    【讨论】:

    • 感谢你们俩,@Markus Unterwaditzer 和 @khoffrath。我解决了简单地将日志记录代码从if __name__ == '__main__' 块移动到.wsgi 文件中更高范围的问题。现在我可以使用绝对路径编写日志文件。 Yuppy-doooo!
    【解决方案2】:

    由于您运行的是 Windows:

    哪个用户帐户运行 Apache 服务?默认是系统。此帐户在访问网络资源方面受到限制。您的 Flask 应用程序是否位于共享网络驱动器上?

    您是否尝试设置日志文件的完整路径?

    如果这没有帮助,您能否发布应用程序的 Apache 配置?

    编辑: 我刚刚看到您在__name__ == '__main__' 下配置了日志记录,如果我没记错的话,这段代码在使用 mod_wsgi 部署应用程序时执行。在这种情况下,您必须在其他地方配置日志记录。

    【讨论】:

      【解决方案3】:

      确保运行 apache 进程的用户对您尝试写入的文件夹具有权限。另外,我会检查以下结果:

      sudo find / -name myapp.log
      

      【讨论】:

      • 感谢 Craysiii,我检查了但不幸的是没有文件的迹象。我实际上是在 Windows 环境中运行 Apache
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2016-08-10
      • 1970-01-01
      相关资源
      最近更新 更多