您想要实现的称为“基于大小和时间的文件命名和触发策略”(SizeAndTimeBasedFNATP),可以在最新版本的 logback 包中找到,目前是 1.1.7,但是,它可以是在 1.1.2 中也可以找到,我使用它是因为它可以在没有太多异步进程的情况下产生更可预测的结果(即使 1.1.2 更慢)。
logback 包的工作方式与 log4j 类似,但使用基于 XML 的配置文件 (logback.xml),在您的情况下可能如下所示(注意 test_%d{yyyyMMdd}.log.%i - 这是你的模式)。
请注意,很遗憾,(目前)不可能将索引限制在日期内。因此,每个日期不能只有 5 个日志块——每个日期都将完全使用独立于每个日期的日志块索引进行记录。但是,您可以限制日期总数和(在 1.1.7 中)日志文件夹的总大小(使用 ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy)。
另外我建议你至少使用 10Mb 的块大小(100Kb 很小),因为更大的块,一般来说,更容易通过日志库维护(更少的 CPU 消耗)。
<?xml version="1.0" ?>
<configuration>
<property name="log.folder" value="C:/logs/projectlogs"/>
<!-- UNCOMMENT BELOW SECTION IF CONSOLE IS REQUIRED -->
<!--
<appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE">
<encoder>
<pattern>[%p] [%thread] %logger - %msg%n</pattern>
</encoder>
</appender>
-->
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE">
<File>${log.folder}/test.log</File>
<Append>true</Append>
<encoder>
<pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.folder}/test_%d{yyyyMMdd}.log.%i</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100KB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
<!-- up to 10 GB max -->
<totalSizeCap>10GB</totalSizeCap>
<MaxFileSize>100KB</MaxFileSize>
</rollingPolicy>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="FILE"/>
</root>
<logger name="Main">
<level value="DEBUG" />
</logger>
<logger name="ch.qos">
<level value="WARN"/>
</logger>
</configuration>
测试 Java 应用程序
package logtester;
import org.apache.log4j.Logger;
public class LogTester {
public static void main(String[] args) {
Logger logger = Logger.getLogger("Main");
for(int i = 1; i<=20000; i++)
logger.info("Log message "+i);
}
}
运行后的文件夹结构:
13,230 test.log
102,929 test_20160430.log.0
103,168 test_20160430.log.1
102,816 test_20160430.log.10
102,816 test_20160430.log.11
103,168 test_20160430.log.2
103,168 test_20160430.log.3
103,168 test_20160430.log.4
103,168 test_20160430.log.5
102,815 test_20160430.log.6
102,816 test_20160430.log.7
102,816 test_20160430.log.8
102,816 test_20160430.log.9
希望对你有帮助。