Spring Boot RollingFileAppender создает файл, но ничего не добавляет - PullRequest
0 голосов
/ 03 августа 2020

Я использую 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, когда я запускаю проект, но внутри еще ничего не написано. Какие-нибудь решения? Заранее спасибо!

1 Ответ

1 голос
/ 03 августа 2020

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

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

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

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

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

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

<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, регистрируются в вашем текущем файле. Если вы хотите, чтобы все журналы регистрировались в файле, вы должны прикрепить его к регистратору root, как приложение STDOUT.

<root level="INFO">
  <appender-ref ref="STDOUT" />
  <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...