logging - logback,如何在附加之前更改日志事件中的消息

标签 logging logback slf4j

使用 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/

    相关文章:

    logging - Logstash 从日志消息中过滤时间戳

    c# - log4net 不会为引用的项目文件创建日志文件

    java - SLF4J:类路径包含多个 SLF4J 与 maven 的绑定(bind)

    eclipse - 如何在 Eclipse RCP 应用程序中正确设置 Logback?

    java - Logback JaninoEventEvaluator 将日志事件定向到特定的附加程序

    java - 使用 slf4j 禁用特定日志输出

    java - 谁在阅读 logback.xml

    python - 如何设置扭曲的日志记录级别?

    java - logback 配置不适用于 spring

    spring-boot - 带有 log4j2 实现的 Slf4j 异常