Python Flask调试记录器在生产中导致500服务器错误(Apache)

时间:2015-05-09 17:06:39

标签: python apache logging flask

尝试将500个错误记录到我的Flask Web应用程序上的日志文件中。在localhost上正常工作,但在Ubuntu上使用mod_WSGI和Apache的生产服务器上没有正常工作(根据此设置@ https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps

from flask import Flask, render_template
import logging

app = Flask(__name__)

app.config['LOG_FILE'] = 'application.log'
if not app.debug:
    import logging
    from logging import FileHandler
    file_handler = FileHandler(app.config['LOG_FILE'])
    file_handler.setLevel(logging.INFO)
    app.logger.addHandler(file_handler)

@app.route("/about")
def about():
  ##CREATE AN ERROR
  X = "A" + 1
  return render_template('about.html')

if __name__ == "__main__":
  app.run('0.0.0.0', port=8080, debug=False)

为什么这个在本地环境中工作但不在生产中的任何想法?更改调试设置似乎无法解决。

1 个答案:

答案 0 :(得分:6)

最有可能发生的事情是您在开发时使用用户X运行Web服务器,并且此用户对存储Flask应用程序的目录具有写入权限 - 因此它可以写入{{1} }。

我从你发布的教程中注意到所有的directores都是使用application.log创建的,因此你的目录权限归root用户所有,而你的Flask应用程序是以不同的用户身份运行的写入root所拥有的目录的权限。

有两种可能的解决方法:

将Flask应用安装目录的权限更改为相同:

sudo

更改编写日志文件的位置(首选方法):

$ sudo chown -R www-data:www-data /var/www/FlaskApp

然后将代码更改为:

$ sudo mkdir /var/log/flaskapp
$ sudo chown -R www-data:www-data /var/log/flaskapp