如何*始终*使用DEBUG = False在django中记录异常和堆栈跟踪

时间:2018-06-07 19:40:18

标签: django logging django-2.0

如何设置DEBUG = False,但确保正确记录异常(无论它们在哪里被抛出),包括堆栈跟踪。

这是我的日志配置:

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'},
        'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue'}
    },
    'formatters': {
        'django.server': {
            '()': 'django.utils.log.ServerFormatter',
            'format': '[%(server_time)s] %(message)s'
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'filters': ['require_debug_true'],
            'level': 'DEBUG'
        },
        'django.server': {
            'class': 'logging.StreamHandler',
            'formatter': 'django.server',
            'level': 'INFO'
        },
        'mail_admins': {
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': ['require_debug_false'],
            'level': 'ERROR'
        }
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['console']
    },
    'loggers': {
        'django.request': {
            'handlers': ['console'],
            'propagate': False,
            'level': 'DEBUG',
        },
        'django': {
            'handlers': ['console'],
            'propagate': False,
            'level': 'DEBUG',
        },
        'django.template': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': False,
        },
        'django.security': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
    },
}

1 个答案:

答案 0 :(得分:0)

虽然没有默认配置,其中所有异常都记录在日志文件中,但您可以在django中试用几个选项:

  1. 配置ADMINS setting,以接收有关您网站中所有例外情况的电子邮件
  2. 你可以写一个custom middleware,它有一个process_exception方法,用logger.error('Exception info)
  3. 写入记录器