python - 过滤掉特定的 Python 日志消息

标签 python django

是否可以防止将特定消息写入 Django 日志文件?我读过 Django 记录器文档,他们只处理 过滤 Django 类的错误。

我想防止写入我的日志文件的错误是这样的:

[19/Dec/2014 12:21:21] INFO [requests.packages.urllib3.connectionpool:171] Starting new HTTP connection (1): api.wurflcloud.com

我的 Django 日志记录配置如下所示。

谢谢

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'null': {
            'level':'DEBUG',
            'class':'django.utils.log.NullHandler',
        },
        'logfile': {
            'level':LOG_LEVEL,
            'class':'logging.handlers.RotatingFileHandler',
            'filename': '/var/log/myproj/myproj.log',
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'database_logfile': {
            'level':LOG_LEVEL,
            'class':'logging.handlers.RotatingFileHandler',
            'filename': '/var/log/myproj/database.log',
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':LOG_LEVEL,
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler'
            # Only send emails when DEBUG = False
            #'filters': ['require_debug_false'],
        },
    },
    'loggers': {
        'django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'django.request': {
           'handlers': ['mail_admins'],
           'level': 'ERROR',
           'propagate': False,
        },
        'django.db.backends': {
            'handlers': ['database_logfile'],
            'level': 'DEBUG',
            'propagate': False,
        },
        '': {
            'handlers': ['console', 'logfile', 'mail_admins'],
            'level': 'DEBUG',
        },
    }
}

最佳答案

Python logging 包不支持按消息内容过滤,只能按消息记录器和消息级别过滤。

解决这个问题的两种潜在方法是

  • Monkey-patch 违规函数并将其替换为您自己的不会产生给定消息的版本(函数位于 requests.packages.urllib3.connectionpool:171)

  • 编写您自己的日志记录处理程序,它可以根据内容过滤日志消息(非常繁重的方法只是为了摆脱一条消息)

也可以尝试作为长期解决方案

  • requests 包社区沟通,解释您的问题,寻求合作并编写补丁来修复库,以便在未来的版本中可以轻松摆脱特定消息<

关于python - 过滤掉特定的 Python 日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575535/

相关文章:

python - Django-ckeditor所有用户的上传权限;添加滚动条; & 根据屏幕尺寸自动调整编辑器宽度

Python Pandas Boolean Dataframe,其中 Dataframe 等于 False - 返回 0 而不是 False?

Python - Pytesseract 从图像中提取不正确的文本

python - 使用 Python 在 Windows 上获取目录所有权会导致 "Access denied"错误

Django FormView 没有表单上下文

Django - 内联编辑多对多

python - 有没有更简单的方法用 Python 打包?

python - 修改 TabularInline 中元素的呈现

python - 在列表列表中添加换行符

Python Selenium 屏幕抓取