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

alT*_*Tus 5 django logging exception

我的应用程序中有一个特定的视图,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('')
Run Code Online (Sandbox Code Playgroud)

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

logger.exception只发送一个小的回溯,不发送请求数据。 logger.error只发送请求数据。

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

更新

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

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

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

Vin*_*jip 3

此问题是由于最近版本的 Python 2.7 中已修复的错误造成的。这个错误意味着该exception方法不接受extra参数。

如果您无法升级到合适的最新 Python 2.7,那么您也许可以使用我链接到的问题中引用的修复程序来修补您的 Python。如果做不到这一点,则需要子类化Logger并重写该exception方法才能做正确的事情(基本上是将 a 添加**kwargsexception方法的签名中,该签名将传递到对该方法的调用error