如何手动发送django异常日志?

时间:2013-09-30 20:10:41

标签: django exception logging

我的应用中有一个特定的视图,如果所有内容都成功完成,则返回HttpResponse(''),否则会HttpResponseBadRequest()

此视图适用于外部数据,因此可以引发一些意外的异常。 当然,我需要知道发生了什么。所以我有这样的感觉:

def my_view(request):
    try:
        # a lot of code
        return HttpResponse('')
    except:
        import logging
        logger = logging.getLogger('django.request')
        # logger.error(extra={'request': request}) or logger.exception()
        return HttpResponseBadRequest('')

如果重要的话,我有一个默认的日志记录配置(django 1.5)。

logger.exception只发送一个小的回溯而没有请求数据。 logger.error仅发送请求数据。

所以问题是如何获得与django发送完全相同的追溯(具有相同的主题/正文))。 我认为必须有一些我找不到的干净简单的解决方案。

更新

因此,使用修补后的exception方法,我最终获得了以下代码:

logger.exception('Internal Server Error: %s', request.path,
                 extra={'status_code': 500, 'request': request})

生成与内置django日志记录相同的电子邮件回溯。

1 个答案:

答案 0 :(得分:3)

此问题是由于最新版本的Python 2.7中已修复的错误所致。 This bug表示exception方法不接受extra参数。

如果您无法升级到最近的Python 2.7,那么您可以使用我链接的问题中引用的修补程序修补您的Python。如果你不能这样做,你需要继承Logger并覆盖exception方法来做正确的事情(基本上是向{{1}添加**kwargs方法的签名,通过调用exception方法传递。