Spring 在logback xml中为不同的appender共享相同的编码器设置
我有一个编码器,它使用Spring 在logback xml中为不同的appender共享相同的编码器设置,spring,spring-boot,logging,logback,logstash-logback-encoder,Spring,Spring Boot,Logging,Logback,Logstash Logback Encoder,我有一个编码器,它使用net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder通过股票提供者、模式和自定义提供者的组合来配置日志内容。这同样适用于不同的附件,例如控制台、文件、滚动文件和用于单元测试的自定义附件。我不想在每个appender中重复相同的配置,因为它完全相同,所以我想知道是否有一种方法可以在不同的appender中共享它 e、 g ... 配置可以共享。。。 ... 重复了完全相同的配置。。。 我知道有这个“包含
net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
通过股票提供者、模式和自定义提供者的组合来配置日志内容。这同样适用于不同的附件,例如控制台、文件、滚动文件和用于单元测试的自定义附件。我不想在每个appender中重复相同的配置,因为它完全相同,所以我想知道是否有一种方法可以在不同的appender中共享它
e、 g
... 配置可以共享。。。
... 重复了完全相同的配置。。。
我知道有这个“包含”功能,但它似乎必须从根级别(即
appender
)开始包含。是否有一种在编码器
级别“包含”的方法?不幸的是,logback没有提供一种在xml配置文件中完全共享编码器配置的方法
相反,你可以
net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
的类公共类JSONECODER扩展了LoggingEventCompositeJsonEncoder{
公共JSONECODER(){
}
@凌驾
公开作废开始(){
//注意:您可以通过getContext()访问logback属性。getProperty(…)
JsonProviders=getProviders();
addProvider(新的LoggingEventFormattedTimestampJsonProvider());
addProvider(新的LogLevelJsonProvider());
addProvider(新消息jsonProvider());
addProvider(新的ThreadNameJsonProvider());
addProvider(新LoggerNameJsonProvider());
addProvider(新的MdcJsonProvider());
addProvider(新的LogstashMarkersJsonProvider());
addProvider(新的StackTraceJsonProvider());
addProvider(新参数jsonProvider());
super.start();
}
}
共享编码器配置,但不幸的是,这需要将groovy添加到类路径中。是的,谢谢。我想你是对的,但是在接受“没有办法用纯xml实现”作为答案之前,我想先等一下,看看是否还有其他人的答案(比如你提到的使用groovy)。此外,在程序中执行此操作会失去配置更改的便利性。但要感谢你努力向所有人展示这种可能性,荣誉。
<configuration>
<appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
... configuration can be shared ...
</encoder>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
... repeated the exact same configuration ...
</encoder>
</appender>