2

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

我尝试使用自己的 CONSOLE 附加程序在 logback-spring.xml 中声明一个根记录器,但这只会复制输出。我已经尝试声明一个空的根记录器(以设置不同的日志记录级别)和一个与包含的同名的新附加程序(“CONSOLE”),但这是误导性的(因为根记录器是空的)并且仍然没有删除文件附加程序。

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 附加程序以覆盖包含的配置。

编辑:我的问题是关于从包含文件继承的附加程序,因此建议在我可以在 logback 中禁用附加程序吗?不要真正解决这个问题。

4

1 回答 1

0

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

如果前面定义的 FileAppender/RollingFileAppender 具有与当前 appender 相同的 File 选项,那么这两个 appender 会发生冲突,因为 FileAppender 实例不能共享相同的输出目标。为防止数据丢失,当前的 appender 不会启动。确保每个 appender 都有一个唯一的 File 选项。

可以禁用附加程序。然而,这种方式更像是一种技巧,而不是一种适当的解决方案。

于 2019-12-17T19:37:32.997 回答