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
,