Python 使用mod_wsgi记录烧瓶错误

Python 使用mod_wsgi记录烧瓶错误,python,logging,mod-wsgi,Python,Logging,Mod Wsgi,很久以来我一直在努力使这项工作正常进行,但现在我真的束手无策了。我已经尝试了在SO和flask文档中找到的所有东西,但我仍然无法使用一个简单的错误日志来调试我的应用程序。下面是粘贴的代码- # main.py from flask import Flask import logging app = Flask(__name__) file_handler = logging.FileHandler(filename='/tmp/election_error.log') file_handler

很久以来我一直在努力使这项工作正常进行,但现在我真的束手无策了。我已经尝试了在SO和flask文档中找到的所有东西,但我仍然无法使用一个简单的错误日志来调试我的应用程序。下面是粘贴的代码-

# 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>
#main.py
从烧瓶进口烧瓶
导入日志记录
app=烧瓶(名称)
file_handler=logging.FileHandler(filename='/tmp/election_error.log')
文件\u handler.setLevel(logging.WARNING)
app.logger.addHandler(文件\处理程序)
@应用程序路径(“/”)
def hello():
回答“你好
#缺少引号以生成错误
如果名称=“\uuuuu main\uuuuuuuu”:
app.run()
#wsgi文件
导入系统
导入日志记录
sys.path.insert(0,“/var/www/voting_app”)
logging.basicConfig(stream=sys.stderr)
从主导入应用程序作为应用程序
#apache2配置文件
WSGIDaemonProcess投票\应用程序线程=5
WSGIScriptAlias/election/var/www/voting_app/voting_app.wsgi
日志级别信息
WSGIProcessGroup投票应用程序
WSGIApplicationGroup%{GLOBAL}
命令拒绝,允许
通融
请告诉我哪里出错了。非常感谢。

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

只需引发一个异常即可:

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

您创建的特定错误是一个语法错误,它会导致WSGI脚本文件无法加载到mod_WSGI中。此错误会出现在Apache错误日志文件中,而不是使用日志模块设置的日志文件中。您查看过Apache错误日志文件吗

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

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


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

这是可行的!但其他错误怎么办?这是我创建的一个伪main.py。我的一个伪main.py给出了一个500错误,但日志文件看起来是空的?我该怎么做才能捕获开发服务器上显示的各种错误!Thanks@Prakhar:你能捕捉到最多异常。不只是语法错误,在部署之前测试代码以捕获这些错误。如果在生产中仍然看到500个错误,那么flask代码没有运行;这可能是配置错误或语法错误,您无法捕获这些错误。请检查WSGI服务器的日志。