Я использую log4j2 с PatternLayout, и этот шаблон: %d %-5p %t %c{1.} - %m %X%n%ex
. Этот %X
добавляет карту контекста (также известную как контекст диагностики мультимедиа) в конец строки журнала перед любыми исключениями.
В моем агрегаторе журналов я пытаюсь разобрать эти сообщения обратно в структурированные данные — это легко для даты, уровня, времени и т. д., но сложнее собрать карту из Map.toString
реализации Java по умолчанию — поскольку она {key1=value 1, key2=value 2}
без при экранировании становится трудно анализировать, когда значение содержит неэкранированные символы =
или ,
. JSON, с другой стороны, было бы тривиально разобрать обратно на карту.
Я не могу найти места, где можно подключиться к MDC-печати PatternLayout, но Log4j2 — очень расширяемая библиотека, и я надеюсь, что есть что-то, что я упустил из виду.