【问题标题】:Prevent instantiate of specific appender防止实例化特定的 appender
【发布时间】:2013-12-26 01:21:07
【问题描述】:

I choose a log appender dynamically by using a Java system property这样的

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </layout>
  </appender>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <prudent>true</prudent>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${logLocation}/%d{yyyyMMdd}.%i.log</fileNamePattern>          
    </rollingPolicy>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender> 

  <root level="DEBUG">
    <appender-ref ref="${logAppender:-STDOUT}" />
  </root>
</configuration>

如您所见,logAppender 变量的默认值为STDOUT

问题是即使选择了STDOUT appender,FILE appender 也会被实例化并继续在项目的根目录上创建logLocation_IS_UNDEFINED/%d{yyyyMMdd}.%i.log 文件。

我可以阻止FILE appender 的实例化,以免产生无用的目录和文件吗?

【问题讨论】:

    标签: java logging log4j logback


    【解决方案1】:

    我猜你可以删除 FILE appender,因为你不需要它。

     <fileNamePattern>${logLocation}/%d{yyyyMMdd}.%i.log</fileNamePattern>
    

    似乎您尚未初始化变量 logLocation,这就是您使用“logLocation_IS_UNDEFINED”获取文件名的原因。声明您的文件位置并使用如下所示。您将在正确的位置获得正确的文件名。

      <fileNamePattern>${logLocation}/${FILE_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2017-10-30
      • 2021-05-11
      • 2017-08-29
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多