Используя logback 1.2.3 и Java 9 ...
Погуглил, пытаясь найти встроенный способ изменить сообщение журнала до того, как оно попадет в приложение. Единственный способ - через макет косой черты кодировщика? В основном ищу что-то вроде обогащения, предоставляемого Serilog, где вы можете изменить сообщение (событие) до того, как оно упадет в приемник.
Вот пример использования: до того, как событие журнала попадет в приложение, требуется ловушка, по крайней мере, для изменения текста сообщения.
2 ответа
PatternLayout
содержит {{ X1}}, который сопоставляет слова преобразования (%msg
, %n
, %ex
и т. Д.) С реализациями ch.qos.logback.core.pattern.Converter
.
Вы можете предоставить свою собственную реализацию MessageConverter
и связать ее с пользовательским словом преобразования следующим образом:
Добавьте это в
logback.xml
<!-- using mx to imply 'message extended' --> <conversionRule conversionWord="mx" converterClass="some.package.CustomMessageConverter" />
Реализуйте
some.package.CustomMessageConverter
следующим образом:import ch.qos.logback.classic.pattern.CustomMessageConverter; import ch.qos.logback.classic.spi.ILoggingEvent; public class CustomMessageConverter extends MessageConverter { public String convert(ILoggingEvent event) { return enhance(super.convert(event)); } // implement your "hook ... to at least alter the message text" private String enhance(String incoming) { // ... } }
Обновите свой шаблон кодировщика, чтобы использовать слово преобразования
mx
:<encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss}|[%thread]|[%X{complexNestedValue:-NA}]|%-5level|%logger{36}|%mx %n</pattern> </encoder>
После внесения этих изменений ваш пользовательский преобразователь будет задействован, и вывод будет включать все, что CustomMessageConverter.convert
возвращает для каждого события журнала.
Просто расширяя ответ на гличтинг, вы можете передать свойство Spring в CustomMessageConverter
, если это необходимо.
В вашем application.yml
my.logging.properties: PropertyOne, PropertyTwo
В вашем logback.xml
<springProperty scope="context" name="myLoggingPoperties" source="my.logging.properties"/>
Ваш шаблон кодировщика станет
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss}|[%thread]|[%X{complexNestedValue:-NA}]|%-5level|%logger{36}|%mx{${myLoggingPoperties}} %n</pattern>
</encoder>
Свойства доступны как List<String>
в вашем CustomMessageConverter
// implement your "hook ... to at least alter the message text"
private String enhance(String incoming) {
List<String> properties = getOptionList();
// ...
}
Похожие вопросы
Новые вопросы
logging
Регистрация данных в компьютере - это процесс записи событий в компьютерной программе или компьютерной системе, обычно с определенной областью действия, чтобы обеспечить контрольный журнал, который можно использовать для понимания деятельности системы и диагностики проблем. Не забудьте включить соответствующие теги программного или аппаратного обеспечения в дополнение к этому тегу.