SpringBoot с LogBack создает папку LOG_FILE_IS_UNDEFINED - PullRequest
0 голосов
/ 09 мая 2018

Я использую SpringBoot с LogBack и пытаюсь направить все операторы журнала одного конкретного пакета (здесь обозначается как «com.example.somepackagename») в файл. Все остальные операторы журнала должны идти на стандартный вывод.

Сначала столкнулся с проблемой, что во время запуска был создан файл "LOG_FILE_IS_UNDEFINED". Затем я решил поискать эту проблему (например, это на github или это на StackOverflow и некоторых других), но ни одно из приложений не решило проблему.

На основании разн. описания Я придумал приведенную ниже конфигурацию, используя файл logback-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_PATH" value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}" />
    <property name="LOG_FILE" value="${LOG_FILE:-ts-msgs.log}" />

    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>

    <appender name="MSG_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${LOG_FILE}</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex</Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_PATH}/archived/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <logger name="com.example.somepackagename" additivity="false" level="debug">
         <appender-ref ref="MSG_LOG_FILE" />
    </logger>

    <logger name="org.springframework" additivity="false" level="info">
        <appender-ref ref="STDOUT" />
    </logger>

    <root level="warn">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

При этом я больше не получаю файл с именем «LOG_FILE_IS_UNDEFINED», но LogBack теперь всегда сначала создает пустой файл «ts-msgs.log» в рабочем каталоге приложения, прежде чем он создает файл с тем же именем в временный каталог (куда этот файл должен идти). Таким образом, каким-то образом во время инициализации он уже создает файл с правильным именем, но правильный путь еще не установлен. Другими словами, порядок инициализации Logback в SpringBoot кажется нарушенным (или, по крайней мере, не интуитивным), и кажется невозможным избежать создания первого файла журнала до определения и применения правильного пути для файла-приложения.

Как можно предотвратить создание этого первого, начального и пустого файла журнала? Это необходимо, поскольку рабочий каталог, как правило, защищен от записи, и попытка создать там файл приведет к исключению (и, как правило, к завершению программы).

Любые советы или предложения?

Кстати: я уже пытался переименовать этот файл в logback.xml (который, кажется, обрабатывался ранее во время запуска SpringBoot), но это не решило проблему, поэтому я сохранил предложенное имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...