我有一个带有3个appender的logback.xml文件: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文件....)
它就像回调调用并在调用记录器时执行所有appender而不管附加的appender。 如何避免这种行为?
非常感谢
答案 0 :(得分: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
上的另一个例子答案 1 :(得分:0)
简而言之,我认为答案是“没有”,没有办法防止b.txt
被创建。查看FileAppender
的源代码,看起来输出文件(以及相应的父文件夹层次结构)是在appender启动时创建的(初始化logback时会发生这种情况)。这种设计是有意的,因为这种方法可以在记录期间节省大量时间。