Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 1.3日志记录:未记录500个错误_Django_Logging_Django 1.3 - Fatal编程技术网

Django 1.3日志记录:未记录500个错误

Django 1.3日志记录:未记录500个错误,django,logging,django-1.3,Django,Logging,Django 1.3,我正在努力使“django.request”记录器能够像广告中那样工作——500个错误似乎不会传播到附加到它的处理程序 在每个新项目的默认日志记录配置中,注释说“此配置执行的日志记录是在每个HTTP 500错误时向站点管理员发送电子邮件”。显然,只有在正确设置管理员的情况下才会发送电子邮件,但我甚至没有看到在视图引发异常时调用处理程序 我从一个空项目开始构建了一个测试用例,并将自己的处理程序添加到“django.request”记录器中: LOGGING = { 'version': 1

我正在努力使“django.request”记录器能够像广告中那样工作——500个错误似乎不会传播到附加到它的处理程序

在每个新项目的默认日志记录配置中,注释说“此配置执行的日志记录是在每个HTTP 500错误时向站点管理员发送电子邮件”。显然,只有在正确设置管理员的情况下才会发送电子邮件,但我甚至没有看到在视图引发异常时调用处理程序

我从一个空项目开始构建了一个测试用例,并将自己的处理程序添加到“django.request”记录器中:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'my_error_handler' : {
            'level': 'ERROR',
            'class': 'log.MyErrorHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins', 'my_error_handler'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}
处理程序本身:

import logging
class MyErrorHandler(logging.Handler):     
    def emit(self, record):
        print "handling error: %s" % record 
如果我自己在记录器上调用.error(),一切都会正常工作。但是当视图生成500时,两个处理程序都不会被调用。My views.py:

import logging

def home(request):

    #this error will be processed by MyErrorHandler
    logging.getLogger('django.request').error("Custom error message")

    #this won't
    raise Exception('500 error message')

    return HttpResponse("Home")
其他一切都是默认的项目;DEBUG为True,中间件配置不变。是否有一些隐藏的配置选项,我需要启用,以有这个工作,因为它在文档中说

谢谢,
马特。

DEBUG
设置为
False
的情况下尝试。启用调试后,将覆盖
设置.py中的错误处理程序。

仅用于测试:

manage.py runserver --insecure

您是否尝试过将
DEBUG
设置为
False
?调试时错误处理程序没有被覆盖吗?谢谢Steve!是的,django.core.handers.base.handle_uncaught_exception是最终处理视图异常的方法,如果settings.DEBUG在调用logger.error之前退出。似乎日志文档应该涵盖这一点-除非我不知何故错过了它?我已经添加了一个正确的答案,以便其他人可以找到此信息。我猜这是因为在调试模式下Django会显示时髦的“special”500/404页面——我想我从来没有在他们(通常是超级)的文档中读过它。将debug设置为False的问题是静态文件无法工作(我在开发中使用Django来服务静态文件)。当DEBUG=True时,是否有其他解决方法可以让日志记录500错误正常工作?谢谢。为了详细说明,这将强制提供静态文件,即使
DEBUG=False