无法从控制台中滤除日志

时间:2020-04-28 14:32:48

标签: python django logging

我正在尝试从控制台中过滤掉某些终结点日志。我的settings.py看起来像这样:

def skip_rss_requests(record):
    if record.args and record.args[0].startswith('GET /api/feed/rss/'):
        print("HEEERRRRREEEE")
        return False
    return True


LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'filters': {
    'skip_rss_requests': {
        '()': 'django.utils.log.CallbackFilter',
        'callback': skip_rss_requests
    }
  },
  'formatters': {
    'simple': {
        'format': '[%(asctime)s] %(levelname)s|%(name)s|%(message)s',
        'datefmt': '%Y-%m-%d %H:%M:%S',
    },
  },
  'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'filters': ['skip_rss_requests'],
            # 'stream': sys.stdout,
            'formatter': 'simple'
        },

但是,尽管满足条件,我仍会在控制台输出中看到这些日志:

[2020-04-28 13:31:11] INFO|django.request|GET /api/feed/rss/
[2020-04-28 13:31:13] INFO|django.request|GET /api/feed/rss/ - 200
HEEERRRRREEEE

关于为什么仍在记录这些记录的任何想法?

2 个答案:

答案 0 :(得分:1)

更新: 我认为您想要的是在记录器部分中将自定义过滤器添加为django.request的过滤器:

LOGGING = {
    'loggers': {
        'django.request':{
            'filters': ['skip_rss_requests'],
            'propagate': False, # stop it from propagating to parent
            # ... and other settings
        }
    }
}


更新:对不起,我没有看清楚问题。

这些INFO|django.request来自django.request记录器。设置'disable_existing_loggers': False时,您可以重新定义默认记录器,但是在记录器设置中,您没有覆盖djang.request记录器,这就是为什么它仍使用默认{{1} }记录器。

参考:https://docs.djangoproject.com/en/3.0/topics/logging/#configuring-logging

您可以将DEBUG设置为False以禁用显示django.request日志


根据Django文档

如果您根本不想配置日志记录(或者您想使用自己的方法手动配置日志记录),可以将LOGGING_CONFIG设置为None

INFO|django.request

参考:https://docs.djangoproject.com/en/3.0/topics/logging/#disabling-logging-configuration

答案 1 :(得分:0)

最后,这行得通:

def skip_rss_requests(record):
    if  hasattr(record, 'request') and hasattr(record.request, 'path') and '/rss/' in record.request.path:
            return False
    return True