Django отправляет журналы в формате json в logstash

Я пытаюсь отправить логи в logstash с помощью пакета python-logstash и мне нужно, чтобы логи были в формате json. Я написал пользовательский форматтер json для моего обработчика logstash. Мои настройки конфигурации логирования:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'main_formatter': {
            '()': CustomJsonFormatter,
        },
    },
    'handlers': {
        'file': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, "debug.log"),
        },
        'info_logger_file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, "development.log"),
            'formatter': 'main_formatter',
        },
        'logstash': {
            'level': 'INFO',
            'class': 'logstash.UDPLogstashHandler',
            'host': 'logstash.example.com',
            'port': 8080,
            'version': 1,
            'message_type': 'logstash',
            'fqdn': False,
            'tags': ['app'],
            'formatter': 'main_formatter',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': True,
        },
        'info_logger': {
            'handlers': ['info_logger_file', 'logstash'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}

my CustomJsonFormatter:

from pythonjsonlogger import jsonlogger


class CustomJsonFormatter(jsonlogger.JsonFormatter):
    def add_fields(self, log_record, record, message_dict):
        super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
        if not log_record.get('timestamp'):
            # this doesn't use record.created, so it is slightly off
            now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')
            log_record['timestamp'] = now
        if log_record.get('level'):
            log_record['level'] = log_record['level'].upper()
        else:
            log_record['level'] = record.levelname

        log_record['application'] = 'production'

Но когда я пытаюсь записать что-то в журнал, он выбрасывает исключение:

import logging
log = logging.getLogger('info_logger')

log.info("test")

enter image description here

Вернуться на верх