Не удается отфильтровать логи с консоли - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь отфильтровать определенные журналы конечных точек из консоли. Мой 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 ]

1 голос
/ 28 апреля 2020

Обновление: Я думаю, что вы хотите добавить свой пользовательский фильтр в качестве фильтра 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, поэтому он все еще использует регистратор django.request по умолчанию.

Ссылка: https://docs.djangoproject.com/en/3.0/topics/logging/#configuring -logging

Вы можете установить для DEBUG значение False, чтобы отключить отображение INFO|django.request logs


Согласно Django docs

Если вы вообще не хотите настраивать ведение журнала (или хотите настроить ведение журнала вручную, используя собственный подход), вы можете установить для LOGGING_CONFIG значение None

# settings.py
LOGGING_CONFIG = None

import logging.config
logging.config.dictConfig(...)

Ссылка: https://docs.djangoproject.com/en/3.0/topics/logging/#disabling -logging-configuration

0 голосов
/ 29 апреля 2020

в итоге вот что сработало:

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