Мы используем
log4j2 в наших микросервисах, каждый из которых имеет шаблоны, создающие пары ключ-значение, где значения заключаются в двойные кавычки, чтобы их можно было автоматически анализировать средствами безопасности (фактически, цитирование является требованием нашей группы ИТ-безопасности).
Пример (для ясности показаны только два ключа):
Код: Выделить всё
dateTime="%d{yyyy-MM-dd HH:mm:ss.SSS}" msg="%msg%throwable"%n
Наш код создает журналы следующим образом...
Код: Выделить всё
log.info("Request started");
log.debug("Data received: {}, dataAsJsonObject);
log.error("Reading file failed", ex);
... который затем выдаст такое сообщение:
Код: Выделить всё
dateTime="2024-06-25 13:05:12.984" msg="Request started"
Проблема заключается в том, что сообщения журнала, переданные из кода, содержат двойные кавычки (например, при распечатке содержимого JSON). Они «искажают» последовательность кавычек в напечатанном сообщении журнала. Как вы можете см. в этом примере значение ключа msg теперь уменьшено до Полученные данные: {.
Код: Выделить всё
dateTime="2024-06-25 13:05:12.984" msg="Data received: {"key": "value"}"
Есть ли какой-нибудь способ, чтобы log4j2 экранировал двойные кавычки в значениях, передаваемых в строку формата (например, " -> \" и \ -> \\), для такого результата?
Код: Выделить всё
dateTime="2024-06-25 13:05:12.984" msg="Data received: {\"key\": \"value\"}"
Примечание. Чтобы внести ясность: я говорю об экранировании двойных кавычек не в самом шаблоне формата, а в значениях, которые передаются в форматтер, который расширяет шаблон с помощью переданных значений. значения журнала.
Подробнее здесь:
https://stackoverflow.com/questions/786 ... age-values