我的 logback.xml 中有以下内容(我已将其简化为相关部分):
<if condition='isDefined("REQUEST_LOG_DIR")'>
<then>
<appender name="requests" class="ch.qos.logback.core.FileAppender">
<file>${REQUEST_LOG_DIR}/requests.log</file>
<encoder><pattern>%msg%n</pattern></encoder>
</appender>
</then>
</if>
<logger name="application.requests" additivity="false" level="INFO">
<if condition='isDefined("REQUEST_LOG_DIR")'>
<then>
<appender-ref ref="requests" />
</then>
</if>
</logger>
如果我在定义 REQUEST_LOG_DIR 的情况下运行我的应用程序,它会按预期工作:我记录到此记录器的消息最终在 ${REQUEST_LOG_DIR}/requests.log 中。
但是,如果我在未定义 REQUEST_LOG_DIR 的情况下运行我的应用程序,它最终会创建一个REQUEST_LOG_DIR_IS_UNDEFINED目录,其中包含一个空的 requests.log 文件。
文件保持为空的事实表明,当 REQUEST_LOG_DIR 未定义时,第二条条件逻辑正在按预期工作,不会将附加程序添加到记录器。
但是,我不明白为什么要创建目录。如果 REQUEST_LOG_DIR 未定义(显然是,给定目录的名称),那么第一个条件应该是阻止 FileAppender 被实例化。