Logback-test.xml配置生成两个日志文件而不是一个?

时间:2016-04-22 14:38:24

标签: java spring logging spring-boot logback

当我停止运行spring-boot应用程序时,会生成两个日志文件,而不是一个(一个是预期的)。

我的Logback-test.xml文件中可能导致此问题的错误是什么?

的logback-的test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <timestamp key="myTimestamp" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/>

    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <logger name="org.springframework.web" level="INFO"/>

    <!-- Send debug messages to System.out -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- By default, encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS}  - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>C:\path\to\my\file\myLog-${myTimestamp}.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} - %msg%n</Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>myLog.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern>
            <MinIndex>1</MinIndex>
            <MaxIndex>10</MaxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>2MB</MaxFileSize>
        </triggeringPolicy>

    </appender>

    <logger name="com.my.package" level="INFO" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>

    <!-- By default, the level of the root level is set to DEBUG -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

正在创建的两个文件是例如:

myLog-2016-04-22_15-47-30.126.log

and

myLog-2016-04-22_15-47-30.922.log

4 个答案:

答案 0 :(得分:9)

解析配置时生成时间戳。由于Spring Boot在启动期间重新初始化一次,因此会生成两个不同的时间戳,因此会生成两个文件。

您可以在配置中使用timeReferene="contextBirth"来获取固定时间戳。由于LoggerContext没有被销毁,只需重新设置就可以了:

<timestamp key="myTimestamp" timeReference="contextBirth" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/>

答案 1 :(得分:2)

您的logging.config属性如何?您的问题可能是pathing(或属性文件中缺少的属性)。例如。应该看起来像这样:

logging.config=classpath:logback-test.xml
application-test.properties中的

另一种可能是您有两个活动配置文件。例如。您的test个人资料和default个人资料。在这种情况下,您可以在logback中使用条件配置来解决它。

有关详细信息,请参阅answer。另外,请参阅该答案的最新评论。 spring boot 1.3包含一些关于使用logback处理多个配置文件的新功能:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-logback-extensions

答案 2 :(得分:0)

问题可能与这一行有关:

<include resource="org/springframework/boot/logging/logback/base.xml"/>
所包含文件的

This version包含在其他人和them have a file appender之一。由于您要定义自己的appender(文件和控制台),因此您可能不需要包含Spring Boot基本文件。

答案 3 :(得分:0)

这有用吗?

<appender name="FILE" class="ch.qos.logback.core.FileAppender"">

    <file>C:\path\to\my\file\myLog-${myTimestamp}.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} - %msg%n</Pattern>
    </encoder>

<!--
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <FileNamePattern>myLog.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern>
        <MinIndex>1</MinIndex>
        <MaxIndex>10</MaxIndex>
    </rollingPolicy>
-->
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>50MB</MaxFileSize>
    </triggeringPolicy>

</appender>