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