我正在将
logback-core
和 logback-classic
的版本升级到 1.5.6 (从 1.1.2 ),但现在升级后我面临的问题是我的日志文件不再被创建。
我们的 logback 配置过去是这样的:
...
<property name="fileName" value="logA" />
<include file="appender.xml"/>
<property name="fileName" value="logB" />
<include file="appender.xml"/>
<property name="fileName" value="logC" />
<include file="lappender.xml"/>
...
而appender.xml使用fileName属性,如下所示:
<appender name="${fileName}" class="ch.qos.logback.core.FileAppender">
<file>${fileName}.log</file>
<Append>${fileAppending}</Append>
<encoder>
<pattern>...</pattern>
</encoder>
</appender>
这用于创建 3 个日志文件:logA、logB、logC
使用 never 版本时,我只得到一个日志文件:logC
经过一些调试后,我看到属性存储在映射中,并且看起来它们正在被解析,然后才处理实际的 xml。由于它们存储在映射中,因此在尝试创建文件之前,我最终会在属性映射中得到“fileName”:“logC”。之后,它尝试创建 3 个文件,“文件名”为“logC”。
我不太确定这是否是预期的行为(在处理配置内容之前读取并存储所有属性/变量),因为这对我来说似乎非常违反直觉。 我在官方文档中找不到任何内容,所以我的第一个问题是,这是否真的是多次设置相同属性/变量时所期望的行为?
我还尝试使用
variable
关键字与不同的 scopes
。为了安全起见,我用文件的实际内容替换了 include file
。我还通过实现 PropertyDefiner
并像这样配置它来尝试动态方法:
<define name="fileName" class="..PropertyDefiner">
<fileName>aFileName</fileName>
</define>
但似乎没有什么可以像旧版本中那样工作。 我有什么做错或错过的事情吗?或者这种行为(多次使用同一个变量并在需要时重新解析)在新版本中不再可能了吗?
看起来我的问题有一个未解决的问题:https://github.com/qos-ch/logback/issues/733