Spring Boot RollingFileAppender создает файл, но ничего не добавляет

Я использую VScode, подключенный к Ubunut через WSL, для сборки проекта SpringBoot. Все работает нормально. Теперь я пытаюсь добавить ведение журнала в свой проект, и logback-spring.xml ниже — это то, что я использую в качестве конфигурации. Пока я вижу, что это работает. Я вижу печать консоли, и она даже создает logback.log файл по нужному мне пути. НО, файл всегда кажется пустым. Я пытался добавить еще несколько регистраторов здесь и там, и все, что я вижу, это консольный вывод ConsoleAppender.

<!--Logfile save path-->
<property name="LOGS_PATH" value="./logs"/>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
    </layout>
</appender>
<appender name="SAMPLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>
<appender name="DAILY_ROLLING_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS_PATH}/logback.log</file>
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOGS_PATH}/logback.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- or whenever the file size reaches 100MB -->
            <maxFileSize>5MB</maxFileSize>
            <!-- kb, mb, gb -->
        </timeBasedFileNamingAndTriggeringPolicy>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
</appender>
<logger name="com.qcells.olap" level="DEBUG">
    <appender-ref ref="SAMPLE" />
</logger>
<logger name="com.qcells.olap" level="INFO">
    <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</logger>
<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>

В java-коде я использую Logger следующим образом: (Rx_Client2 - это просто имя класса, включающего этот код)

private Logger logger = LoggerFactory.getLogger(Rx_Client2.class);        
logger.info("success");

Я считаю, что это простой способ создания данных журнала, и я вижу распечатку сообщения об успехе на своей консоли.

Я попытался удалить файл logback.log, и он заново создает файл logback.log, когда я запускаю проект, но внутри все еще ничего не написано. Любые решения? Заранее спасибо!


person Hoon    schedule 03.08.2020    source источник


Ответы (1)


Согласно вашему опубликованному logback-spring.xml, вы определили три приложения. STDOUT, SAMPLE и DAILY_ROLLING_FILE_APPENDER. Первый STDOUT назначается корневому регистратору.

<root level="INFO">
  <appender-ref ref="STDOUT" />
</root>

и поэтому вы видите журнал на консоли, когда вы записываете что-то на

private Logger logger = LoggerFactory.getLogger(Rx_Client2.class);

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

Два других приложения привязаны к конкретным регистраторам.

<logger name="com.qcells.olap" level="DEBUG">
    <appender-ref ref="SAMPLE" />
</logger>
<logger name="com.qcells.olap" level="INFO">
    <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</logger>

Находится ли Rx_Client2.class в пакете ниже com.qcells.olap?

Таким образом, только журналы для регистраторов, которые находятся ниже com.qcells.olap, регистрируются в вашем скользящем файле. Если вы хотите, чтобы все журналы регистрировались в файле, вы должны прикрепить его к корневому регистратору, например, к приложению STDOUT.

<root level="INFO">
  <appender-ref ref="STDOUT" />
  <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</root>
person C. Weber    schedule 03.08.2020
comment
Благодарю вас! Это действительно решило мою проблему. Но у меня есть еще один вопрос, если вы не возражаете. Rx_Client2 находится в com.qcells.ess_server.client. Я исправил путь и попробовал еще раз, но не сработало. Любая причина, по которой корневой уровень работает, а путь - нет ?? - person Hoon; 06.08.2020