Возможно ли объединить TimeBasedRollingPolicy с SizeBasedTriggeringPolicy?
Да, SizeAndTimeBasedRollingPolicy
- это решение для вас.
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/logs/log.txt</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%p %d [%t] %L - %m%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>D:/logs/log.%d{yyyy-MM-dd HH-mm}.%i.txt</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
конфигурациячтобы дополнительно свернуть файл, когда исходный файл журнала превышает определенный предел (например, 5 ГБ)
вот ограничение размера для вас: <maxFileSize>1MB</maxFileSize>
измените его на 5 ГБ, я проверил его с 1 МБ, но он будет работать для любого размера
Таким образом, файлы журнала следует переворачивать один раз в час, за исключением случаев, когда файл становится большим, тогда он должен быть перевернут раньше.
Если я вас правильно понял, вы хотите бросить на основе максимального размера или времени, в зависимости от того, что будет достигнуто первым.Благодаря этому происходит прокатка по времени: {yyyy-MM-dd HH-mm}
.Он катится каждую минуту, если вы хотите катиться каждый час, используйте: {yyyy-MM-dd HH}
.
Приведенный выше аппендер при использовании выдает:
Вы можете видеть, что файлы вращаются с максимальным размером 1 МБ, если этот размер достигает в течение минуты, или если размер не достигает, но время достигает, оно катится все еще (это очевидно в файлахlog.2019-01-04 12-23.2.txt
и log.2019-01-04 12-24.3.txt
)
Logback.xml, который должен работать для вас:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Send debug messages to System.out -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%p %d [%t] %L - %m%n</pattern>
</encoder>
</appender>
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/logs/log.txt</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%p %d [%t] %L - %m%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>D:/logs/log.%d{yyyy-MM-dd HH}.%i.txt</fileNamePattern>
<maxFileSize>5GB</maxFileSize>
<!-- keep 30 days' worth of history -->
<!-- <maxHistory>30</maxHistory>
<totalSizeCap>20MB</totalSizeCap>-->
</rollingPolicy>
</appender>
<logger name="javaportreader" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="application" level="DEBUG" additivity="false">
<appender-ref ref="APPLICATION"/>
</logger>
<!-- By default, the level of the root level is set to DEBUG -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
<root level="INFO">
<appender-ref ref="APPLICATION"/>
</root>
</configuration>