使用mod_wsgi记录烧瓶错误

时间:2012-11-04 09:38:11

标签: python logging mod-wsgi

我一直试图让这个工作很长一段时间,但我现在真的在我的智慧结束。我已经尝试过在SO和flask文档上找到的所有内容,但我仍然无法使用简单的错误日志,以便我可以调试我的applcation。下面是粘贴的代码 -

# main.py
from flask import Flask
import logging

app = Flask(__name__)
file_handler = logging.FileHandler(filename='/tmp/election_error.log')
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)

@app.route('/')
def hello():
   return "hello
   #missing quotes to generate error

if __name__ == "__main__":
   app.run()


#wsgi file
import sys
import logging
sys.path.insert(0, "/var/www/voting_app")
logging.basicConfig(stream=sys.stderr)
from main import app as application


# apache2 conf file
WSGIDaemonProcess voting_app threads=5
WSGIScriptAlias /election /var/www/voting_app/voting_app.wsgi

LogLevel info

<Directory /var/www/voting_app>
        WSGIProcessGroup voting_app
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
</Directory>

请告诉我哪里出错了。非常感谢你。

2 个答案:

答案 0 :(得分:6)

您创建的特定错误(语法错误)会导致WSGI脚本文件无法在mod_wsgi中加载。此错误最终会出现在Apache错误日志文件中,而不是您使用日志记录模块设置的日志文件。你看过Apache错误日志文件吗?

对于在请求执行期间引发的异常,Flask默认将其转换为500错误页面,否则会显示详细信息。您需要将Flask设置为邮件或以其他方式记录此类运行时异常:

http://flask.pocoo.org/docs/errorhandling/

如果您希望在返回浏览器的500页中显示运行时异常以进行开发,则需要启用Flask调试模式。这可以通过将app.debug设置为True来完成:

http://flask.pocoo.org/docs/config/?highlight=app%20debug

您不应该在面向用户的生产系统上启用调试模式。

答案 1 :(得分:3)

您需要生成运行时异常,而不是编译时异常。缺少的引用是编译时异常,您的日志代码将永远不会被执行。

只需提出异常:

@app.route('/')
def hello():
   raise Exception('Deliberate exception raised')