Как можно включить дату в имя файла лога при использовании logback?

Как можно включить дату и время в имя файла лога при использовании logback? Буду признателен, если вы сможете предоставить пример полного файла logback.xml.
  • 27 декабря 2024 г. 14:23
Ответы на вопрос 2
Для того чтобы включить дату и время в имя файла лога при использовании Logback, вы можете использовать параметр `${timestamp}` в конфигурации имени файла. Для форматирования даты и времени вы можете использовать шаблон, который поддерживается Logback.

Пример файла `logback.xml`, который включает дату и время в имя файла лога:

```xml
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app_log-%d{yyyy-MM-dd_HH-mm-ss}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app_log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>30</maxHistory> <!-- Хранение 30 дней логов -->
            <totalSizeCap>1GB</totalSizeCap> <!-- Ограничение по размеру -->
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>
```

### Пояснения:

1. **RollingFileAppender**: Этот аппендер отвечает за запись логов в файл и поддерживает ротацию.
  
2. **<file>**: Указывает имя файла. Здесь `"%d{yyyy-MM-dd_HH-mm-ss}"` означает, что имя файла будет включать дату и время создания.

3. **TimeBasedRollingPolicy**: Указывает политику ротации логов на основе времени. В этом случае, файлы будут ротироваться ежедневно.

4. **<fileNamePattern>**: Определяет шаблон для имен файлов историй логов. `"%d{yyyy-MM-dd}.%i.log"` означает, что новые логи будут сохранены с сегодняшней датой и порядковым номером (`%i`).

5. **<maxHistory>**: Устанавливает максимальное количество дней, в течение которых будут храниться логи.

6. **<totalSizeCap>**: Ограничивает общий размер всех логов.

7. **<encoder>**: Определяет формат сообщений в логе. Здесь используется формат для даты, уровня логирования, логгера и сообщения.

С помощью такой конфигурации у вас будут файлы логов, имена которых будут начинаться с даты и времени создания лога, что обеспечивает удобство в организации и ведении логов.
Добрый вечер! 

Вот один из примеров, который нашёл на сайте :
<configuration>

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

    <logger name="com.mkyong" level="debug" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>

    <root level="error">
        <appender-ref ref="CONSOLE"/>
    </root>

</configuration>


Чтобы вывести не только время, но и дату, можно заменить значение в блоке Pattern на:
%d{yyyy-MM-dd HH:mm:ss}

Должно сработать.
Похожие вопросы