如何从包含的文件中删除/禁用/覆盖附加程序?

问题描述 投票:0回答:1

我们正在使用Spring Boot,并且在我们的logback-spring.xml文件中包含org / springframework / boot / logging / logback / base.xml。我需要覆盖root记录程序,以排除/禁用/覆盖在包含文件中声明的附加程序,尤其是CONSOLE附加程序(嗯,并删除FILE附加程序)。

我已经尝试使用自己的CONSOLE附加程序在logback-spring.xml中声明一个根记录器,但这只会复制输出。我尝试声明一个空的root记录器(设置不同的日志记录级别)和一个与包含的名称相同的新追加程序(“ CONSOLE”),但这会引起误解(因为root记录器为空)并且仍然无法删除FILE附加程序。

logback-spring.xml的误导版本

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>

<configuration scan="true">
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <!-- bunch of loggers -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    <root level="ERROR">
    </root>
</configuration>

我期望的是这样的:

    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <appender name="CUSTOM-CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    <root level="ERROR">
        <appender-ref ref="CUSTOM-CONSOLE"/>
    </root>

然后不使用包含的CONSOLE和FILE附加程序。

或者也许重新声明一些虚拟/无操作CONSOLE和FILE附加程序以覆盖包含的配置。

编辑:我的问题是关于从包含文件继承的追加程序,因此Can I disable an appender in logback?中的建议并未真正解决问题。

java spring-boot logback spring-logback
1个回答
0
投票

似乎没有办法删除/覆盖附加程序。但是根据此http://logback.qos.ch/codes.html#earlier_fa_collision

如果先前定义的FileAppender / RollingFileAppender具有与当前追加程序相同的File选项,则这两个追加程序会发生冲突,因为FileAppender实例无法共享相同的输出目标。为了防止数据丢失,当前附加程序将不会启动。确保每个附加程序都有一个唯一的File选项。

可以禁用一个追加器。但是,这种方法比适当的解决方案更像是一种hack。

© www.soinside.com 2019 - 2024. All rights reserved.