1

我的 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 被实例化。

4

1 回答 1

1

FileAppender 不是偷懒。有一些方法可以部分解决这个问题。

您可以将文件包装成:

 <appender name="wrapper" class="ch.qos.logback.classic.sift.SiftingAppender">

  ....

我记得有些情况我不喜欢这个,但现在想不起来了。

于 2021-02-04T05:00:42.267 回答