【问题标题】:How to send django exception log manually?如何手动发送 django 异常日志?
【发布时间】:2013-10-06 19:54:19
【问题描述】:

我的应用中有一个特定的视图,如果一切顺利完成,它应该返回 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 日志记录相同的电子邮件回溯。

【问题讨论】:

  • 你能告诉我们你的 django 日志配置(来自设置文件)吗?
  • 我使用默认日志记录(不要在 settings.py 中设置我自己的LOGGING)。无论如何,我得到了答案(请参阅更新)。

标签: django exception logging


【解决方案1】:

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

如果您无法升级到合适的最新 Python 2.7,那么您也许可以使用我链接到的问题中引用的修复来修补您的 Python。如果你不能这样做,你需要继承 Logger 并覆盖 exception 方法来做正确的事情(这基本上是添加一个 **kwargsexception 方法的签名,这是通过通过调用error 方法。

【讨论】:

  • 谢谢。可以预料的事情之一(我的意思是python错误)。不幸的是,我的操作系统是 ubuntu 12.04,它搭载了 python 2.7.3,并且无法轻松更新到 2.7.5。但是我已经手动修补了内置的日志记录模块,现在一切正常。查看我的更新。
猜你喜欢
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
相关资源
最近更新 更多