【问题标题】:logback loading all appenderslogback 加载所有 appender
【发布时间】:2014-10-17 12:05:41
【问题描述】:

我有一个 logback.xml 文件,其中包含 3 个附加程序:1 个 ConsoleAppender 和 2 个 FileAppender

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

<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}] %msg%m%n%ex</pattern>
        </encoder>
    </appender>

    <appender name="bAppender" class="ch.qos.logback.core.FileAppender">
        <file>logs/b.txt</file>
        <append>true</append>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}] -[%t] %-4r %-5p %c : %n%m%n</pattern>
        </encoder>
    </appender>


    <appender name="aAppender" class="ch.qos.logback.core.FileAppender">
        <file>logs/a.txt</file>
        <append>false</append>
        <encoder>
            <pattern>[%d{dd/MM/yyyy : HH:mm:ss}  %level - %logger] %m%n</pattern>
        </encoder>
    </appender>

    <logger name="aLogger" additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="aAppender" />        
    </logger>

    <root level="info">
        <appender-ref ref="stdout"/>
    </root>
</configuration>

问题是当我启动与 aLogger(Logger LOGGER = LoggerFactory.getLogger("aLogger"); 关联的程序时。它还添加了 bAppend(因此创建了一个空的 b.txt 文件 ....)

这就像 logback 调用并在调用 logger 时执行所有 appender,而不管附加的 appender。 如何避免这种行为?

非常感谢

【问题讨论】:

    标签: java logback fileappender


    【解决方案1】:

    也许回答晚了,但我确实需要和你一样的结果@ulquiorra 所以根据我的搜索,我确实遇到了这个解决方案:使用 SiftingAppender 示例:

    <appender name="bAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator>
            <key>logFileName</key>
            <defaultValue>b</defaultValue>
        </discriminator>
        <sift>
            <appender name="${logFileName}" class="ch.qos.logback.core.FileAppender">
                <file>logs/${logFileName}.txt</file>
    
                <encoder>
                    <pattern>[%d{dd/MM/yyyy : HH:mm:ss}  %level - %logger] %m%n</pattern>
                </encoder>
            </appender>
        </sift>
    </appender>
    

    来自 LogBack Jira:https://jira.qos.ch/browse/LOGBACK-202

    如果你用 SiftingAppender 包装 FileAppender,那么 FileAppender 将在第一个日志事件上创建,因此日志 文件将以惰性方式创建。

    还可以查看文档https://logback.qos.ch/manual/appenders.html#SiftingAppender

    https://www.mkyong.com/logging/logback-xml-example/ 上的另一个例子

    【讨论】:

      【解决方案2】:

      简而言之,我认为答案是否定的,没有办法阻止创建b.txt。查看FileAppender 的源代码,似乎输出文件(以及相应的父文件夹层次结构)是在启动附加程序时创建的(在初始化 logback 时发生)。这种设计是经过深思熟虑的,因为这种方法将在记录期间节省大量时间。

      【讨论】:

      • 非常感谢。该死的,我认为appender在调用相应的记录器时启动。当我运行其他程序时,我负担不起创建空文件的费用。也许创建另一个单独的 logback 文件可以解决这个问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      相关资源
      最近更新 更多