6

我的应用程序中有一个特定的视图,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 日志记录相同的电子邮件回溯。

4

1 回答 1

3

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

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

于 2013-09-30T21:44:57.607 回答