python - 将所有错误记录到 Django 站点上的控制台或文件

标签 python django facebook

在 Debug模式下运行 runserver 时,如何让 Django 1.0 将所有错误写入控制台或日志文件?

我试过使用带有 process_exception 函数的中间件类,如该问题的公认答案中所述:

How do you log server errors on django sites

process_exception 函数会为某些异常调用(例如:views.py 中的 assert(False)),但不会为其他错误(例如 ImportErrors)调用 process_exception(例如:urs.py 中的 import thisclassdoesnotexist)。我是 Django/Python 的新手。这是因为运行时错误和编译时错误之间存在某种区别吗?但是如果这是一个编译时错误,我希望 runserver 会提示,但事实并非如此。

我看过 Simon Willison 关于 Django 调试的精彩演讲 (http://simonwillison.net/2008/May/22/debugging/),但我没有看到适合我的选项。

如果它是相关的,我正在编写一个 Facebook 应用程序,Facebook 会用他们自己的消息来掩盖 HTTP 500 错误,而不是显示 Django 信息丰富的 500 页面。所以我需要一种方法将所有类型的错误写入控制台或文件。

编辑: 我想我的期望是,当我在 urls.py 中导入错误 (ImportError) 时,如果 Django 可以返回包含大量详细信息的 500 错误页面,它应该能够编写将相同的详细信息发送到控制台或文件,而无需向代码添加任何额外的异常处理。我从未见过围绕 import 语句的异常处理。

谢谢, 杰夫

最佳答案

有点极端,但出于调试目的,您可以打开 DEBUG_PROPAGATE_EXCEPTIONS环境。这将允许您设置自己的错误处理。设置所述错误处理的最简单方法是覆盖 sys.excepthook .这将终止您的应用程序,但它会工作。您可能可以采取一些措施来使它不会终止您的应用程序,但这取决于您要为哪个平台部署它。无论如何,永远不要在生产中使用它!

对于生产环境,您几乎必须进行广泛的错误处理。我使用的一种技术是这样的:

>>> def log_error(func):
...     def _call_func(*args, **argd):
...         try:
...             func(*args, **argd)
...         except:
...             print "error" #substitute your own error handling
...     return _call_func
...
>>> @log_error
... def foo(a):
...     raise AttributeError
...
>>> foo(1)
error

如果您在 View 中使用 log_error 作为装饰器,它将自动处理其中发生的任何错误。

The process_exception function is called for some exceptions (eg: assert(False) in views.py) but process_exception is not getting called for other errors like ImportErrors (eg: import thisclassdoesnotexist in urs.py). I'm new to Django/Python. Is this because of some distinction between run-time and compile-time errors?

在 Python 中,所有错误都是运行时错误。这导致问题的原因是因为在调用 View 之前导入模块时会立即发生这些错误。我发布的第一个方法将捕获此类错误以进行调试。您可能能够为生产找出一些东西,但我认为如果您在生产应用程序中遇到 ImportErrors(并且您没有进行任何动态导入),您会遇到更严重的问题。

类似pylint 的工具不过可以帮助您消除这些类型的问题。

关于python - 将所有错误记录到 Django 站点上的控制台或文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/690723/

相关文章:

python - 如何使用 django 在 10 秒不活动后重定向回登录页面?

javascript - Facebook 权限和空数据处理

python - Python 导入时出错

python - 是否可以将模型的@property 装饰器与 Model.values() 一起使用?

python - 两个具有相同结构的 URL

android - Facebook android sdk 如何获取给定页面的点赞数

c# - 使用 Facebook API 编辑帖子返回 OAuthException #100

python - 获取安装时传递的额外参数

python - 断言错误 : No api proxy found for service "urlfetch"

python - Attrs 参数在 URLColumn 中不起作用(Django-tables2)