Graylog фильтры не настроены для Django после настройки

Я установил конфигурацию регистрации, как указано ниже:

LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'simple': {
                'format': '%(levelname)s %(message)s'
            }
        },
        'filters': {
            'fields': {
                'env': 'test'
            }
        },
        'handlers': {
            'graypy': {
                'level': 'DEBUG',
                'class': 'graypy.GELFHandler',
                'host': 'graylog2.example.org',
                'port': 12201,
                'filters': ['fields']
            }
        },
        'loggers': {
            'testlogger': {
                'handlers': ['graypy'],
                'level': 'DEBUG',
                'propagate': True
            }
        }
    }

После запуска фазы приложения через manage.pyЯ не видел filters, env:test выскочил для меня на Graylog GUI, поэтому я проверил настройки локально с python manage.py shell, В консоли у меня есть следующая проверка:

l = logging.getLogger('testlogger')
l.handlers[0].filters[0].fields

И это возвращается AttributeError: 'Filter' object has no attribute 'fields'который, как ожидается, должен был иметь env:test в списке. Я прочитал несколько учебников о том, как настроить filters за GELFhandler в django кажется, что все они имеют схожий формат, как мои настройки выше, я не знаю, почему не установлены только фильтры для моего регистратора.

1 ответ

Решение

Я понял это. По какой-то причине handlers может быть настроен непосредственно путем определения атрибутов в словаре. Однако для фильтров мне нужно добавить дочерний класс из logging.Filter до конфигурации словаря.

class FieldFilter(logging.Filter):
    def __init__(self, fields):
        self.fields = fields

    def filter(self, record):
        for k, v in self.fields.items():
            setattr(record, k, v)
        return True

И тогда я вижу, что env установлен как один фильтр.

ОБНОВИТЬ:

Это не последовательное изменение, чтобы сделать в settings.pyВ долгосрочной перспективе вы не хотите делать это для своего проекта django. Аналогичный dictConfig может быть легко применен в pygelf,

Другие вопросы по тегам