Передайте специфические данные журнала событий с помощью slf4j (и log4j)
Есть ли способ передать дополнительную информацию, которая относится только к текущему событию журнала с slf4j? Информация, основанная на запросе, такая как пользователь, IP-адрес или имя приложения, может быть сохранена и доступна через MDC. Позже я могу получить доступ к этой информации в макете или конвертере, и мне не нужно анализировать сообщение журнала. Если я использую формат на основе JSON, у меня есть другое поле с "appName":myApp
и если я войду с log4j в виде обычного текста, я могу получить к нему доступ через %{appName}
нотации. Есть ли способ достичь этого с помощью информации, которая относится только к одному событию журнала? Например, я хочу передать идентификатор исключения (даже для исключений, которыми я не владею). Лучшее, но все еще уродливое решение - передать идентификатор в MDC, зарегистрировать исключение и впоследствии удалить его. Кто-нибудь знает лучшее решение?
1 ответ
Если вам не нужно использовать slf4j и log4j достаточно хорош - вы можете использовать пользовательские сообщения с log4j: https://logging.apache.org/log4j/2.x/manual/messages.html
Если вы хотите slf4j - вы можете реализовать свой собственный адаптер Logger, который будет обрабатывать любые дополнительные параметры соответствующим образом (например, http://www.slf4j.org/xref/org/slf4j/impl/JDK14LoggerAdapter.html).