Я пытаюсь добавить дополнительные поля моих журналов как ключ-значение, продолжая использовать стандартную библиотеку журналов вместе со structlog ProcessorFormatter.
Вот пример:
Если мы используйте JsonFormatter, дополнительные поля добавляются как ключ-значение в журнал.
С python - json -logger:
formatter = jsonlogger.JsonFormatter()
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logging.basicConfig(
level=logging.DEBUG,
handlers=[handler]
)
logger = logging.getLogger('testnameloger1')
logger.debug('testmsg2', extra={'extra2': 2})
console:
{"message": "testmsg2", "extra2": 2}
При рендеринге с использованием средств форматирования на основе structlog при ведении журнала:
shared_processors = [
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.processors.TimeStamper(fmt='iso'),
]
formatter = structlog.stdlib.ProcessorFormatter(
processor=structlog.processors.JSONRenderer(),
foreign_pre_chain=shared_processors,
)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logging.basicConfig(
level=logging.DEBUG,
handlers=[handler]
)
logger = logging.getLogger('testnameloger1')
logger.debug('testmsg1', extra={'extra1': 1})
console:
{"event": "testmsg1", "logger": "testnameloger1", "level": "debug", "timestamp": "2020-06-16T13:33:50.881221Z"}
Как добавить дополнительные поля в вывод журнала?
Журналы, которые я хотел бы, были бы отформатированы следующим образом:
{"event": "testmsg1", "extra1": 1, "logger": "testnameloger1", "level": "debug", "timestamp": "2020-06-16T13:33:50.881221Z"}
Спасибо за понимание