Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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日志错误邮件在生产中不起作用_Django_Email_Logging_Error Handling_Limit - Fatal编程技术网

限制Django日志错误邮件在生产中不起作用

限制Django日志错误邮件在生产中不起作用,django,email,logging,error-handling,limit,Django,Email,Logging,Error Handling,Limit,我们有一个每分钟数千个请求的网站,我想限制Django发送给我们的错误管理邮件的最大数量,以防我们的代码中出现错误 在我的本地开发系统上,以下日志记录配置运行良好。它设置一个缓存值,该值在10秒后过期。在此时间间隔内发生的错误将完全不报告。这就是我们想要的以下所有代码都放在我们的项目设置文件中。 def limit_error_interval(record): from django.core.cache import cache if not cache.get('last_

我们有一个每分钟数千个请求的网站,我想限制Django发送给我们的错误管理邮件的最大数量,以防我们的代码中出现错误

在我的本地开发系统上,以下日志记录配置运行良好。它设置一个缓存值,该值在10秒后过期。在此时间间隔内发生的错误将完全不报告。这就是我们想要的以下所有代码都放在我们的项目设置文件中。

def limit_error_interval(record):
    from django.core.cache import cache
    if not cache.get('last_error'):
        cache.set('last_error', '1', 10) # 10 sec
        return True

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'error_limit': {
            '()': 'django.utils.log.CallbackFilter',
            'callback': limit_error_interval
        },
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['error_limit',],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins',],
            'level': 'ERROR',
            'propagate': True
        },
    }
}
但是,代码在我们的生产服务器(NGINX)上失败。调用了limit\u error\u interval,但每个错误仍然通过邮件发送。我们的缓存在代码中工作,但它似乎不在这个函数中工作。在设置中使用缓存是否有问题

这种替代方法/代码片段有着完全相同的问题:可以在本地开发人员系统上工作,但不能在生产环境中工作

class ErrorIntervalFilter(object):
    def filter(self, record):
        from django.core.cache import cache
        if not cache.get('last_error'):
            cache.set('last_error', '1', 10)
            return True

LOGGING = {
    'version': 1, 'disable_existing_loggers': False,
    'handlers': {'mail_admins': {'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', 'filters': ['error_interval'],}},
    'filters': {'error_interval': {'()': ErrorIntervalFilter,}},
    'loggers': {'django.request':{'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': True,},},
}

任何帮助或暗示都非常感谢!:-)圣诞快乐

也许您正在生产环境中运行同一应用程序的多个实例(我猜每个实例的限制都有效)

根据我的经验,像这样的日志聚合工具比通过电子邮件接收错误要好得多,因此不值得追查问题的原因。只要安装哨兵就好了。

谢谢保罗!就是这样:-)我们在UWSGI上有几个工作人员,他们都单独使用缓存。这也解释了我们代码中的一些其他“奇怪”行为,lol.+1代表哨兵。我们会调查的。