使用logback 1.2.3和Java 9 ...
在尝试找到一种内置方法来更改日志消息,然后才能到达appender。是编码器斜线布局的唯一方法吗?基本上寻找像Serilog提供的类似浓缩的东西,你可以在它变成水槽之前改变信息(事件)。
以下是用例:在日志事件进入appender之前,需要一个钩子来至少改变消息文本。
答案 0 :(得分:3)
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.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
返回值
答案 1 :(得分:0)
只需扩展glytching的答案,就可以根据需要将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();
// ...
}