Logback 条件 ("isDefined") appender 创建不起作用
Logback conditional ("isDefined") appender creation not working
我的 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。
即FileAppender
is not lazy。有一些方法可以部分解决这个问题。
您可以将文件包装成:
<appender name="wrapper" class="ch.qos.logback.classic.sift.SiftingAppender">
....
我记得有过不喜欢这个的,现在想不起来了。
我的 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。
即FileAppender
is not lazy。有一些方法可以部分解决这个问题。
您可以将文件包装成:
<appender name="wrapper" class="ch.qos.logback.classic.sift.SiftingAppender">
....
我记得有过不喜欢这个的,现在想不起来了。