Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在logback xml中为不同的appender共享相同的编码器设置_Spring_Spring Boot_Logging_Logback_Logstash Logback Encoder - Fatal编程技术网

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
    的类
  • 在该类中以编程方式执行配置,然后
  • 在xml中引用您的类
  • 例如:

    公共类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>