防止特定appender的实例化

时间:2013-12-26 01:21:07

标签: java logging log4j logback

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而不是制作无用的目录和文件?

1 个答案:

答案 0 :(得分:0)

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

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

好像你没有初始化变量logLocation,这就是你得到“logLocation_IS_UNDEFINED”文件名的原因。声明您的文件位置并使用如下所示。您将在正确的位置获得正确的文件名。

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