rab*_*hak 2 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)
Run Code Online (Sandbox Code Playgroud)
有什么想法,为什么这是在当地环境,但没有生产?更改调试设置似乎无法解决.
最有可能发生的事情是您使用用户X在开发中运行Web服务器,并且此用户对存储Flask应用程序的目录具有写入权限 - 因此它可以写入application.log.
我从你发布的教程中注意到所有的directores都是使用创建的sudo,因此你的目录权限归root用户所有,而你的Flask应用程序作为一个不同的用户运行,没有权限写入root拥有的目录.
有两个可能的修复:
将Flask应用程序安装目录的权限更改为相同:
$ sudo chown -R www-data:www-data /var/www/FlaskApp
Run Code Online (Sandbox Code Playgroud)
要么
更改编写日志文件的位置(首选方法):
$ sudo mkdir /var/log/flaskapp
$ sudo chown -R www-data:www-data /var/log/flaskapp
Run Code Online (Sandbox Code Playgroud)
然后将代码更改为:
app.config['LOG_FILE'] = '/var/log/flaskapp/application.log'
Run Code Online (Sandbox Code Playgroud)