使用 logback 1.2.3 和 Java 9...
谷歌搜索试图找到一种内置方法来在日志消息到达附加程序之前对其进行更改。是通过编码器斜线布局的唯一方法吗?基本上是在寻找 Serilog 提供的丰富功能,您可以在其中更改消息(事件),然后再将其放入接收器。
这是用例:在日志事件进入附加程序之前,需要一个钩子(Hook)来至少更改消息文本。
最佳答案
Logback 的 PatternLayout
包含 defaultConverterMap
它将转换词(%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.MessageConverter;
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
为每个日志事件返回
关于logging - logback,如何在附加之前更改日志事件中的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49244282/