1

我有一个 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 调用并在调用记录器时执行所有附加程序,而不管附加的附加程序。如何避免这种行为?

非常感谢

4

2 回答 2

2

也许回答迟了,但我确实需要与@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/上的另一个示例

于 2017-11-10T08:40:32.857 回答
0

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

于 2014-10-17T15:45:43.403 回答