Конфигурация Logback-test.xml создает два файла журнала вместо одного?

Когда я перестаю запускать мое приложение 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

Ответ 1

Временная метка создается при анализе конфигурации. Поскольку Spring Boot повторно инициализирует logback один раз во время запуска, генерируются две разные временные метки и, следовательно, два файла.

Вы можете использовать timeReferene="contextBirth" в своей конфигурации, чтобы получить постоянную метку времени. Так как LoggerContext не уничтожается, просто перезагрузите его:

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

Ответ 2

Как выглядит ваше свойство logging.config? Проблема может быть pathing (или свойство, отсутствующее в вашем файле свойств). Например. должен выглядеть примерно так:

logging.config=classpath:logback-test.xml

в application-test.properties.

Другая возможность может заключаться в том, что у вас есть два активных профиля. Например. ваш профиль test и default. В этом случае вы можете обойти его с условной конфигурацией в журнале.

Подробнее см. . Также см. Последний комментарий к этому ответу. spring boot 1.3 включает некоторые новые функции, связанные с обработкой нескольких профилей с помощью logback:

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

Ответ 3

Проблема, вероятно, связана с этой строкой:

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

Эта версия включенных файлов включает в себя другие и одну из у них есть файл-приложение. Поскольку вы определяете свои собственные приложения (файл и консоль), вам, вероятно, не нужно включать базовый файл загрузки Spring.

Ответ 4

Это работает?

<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>