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")