我使用下面的代码以编程方式设置我的 Log4j 配置。
private void initLog4JConfig() {
if (!firstCall) {
return;
}
Level logLevel = Level.INFO;
String pattern = "%d{yyyy-MM-dd HH:mm:ss,SSS} | %-5p | %m%n";
String fileName = GlobalData.getLogFileName();
if (GlobalData.getDebugLevel() > 10) {
logLevel = Level.DEBUG;
}
// console
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(logLevel);
builder.setConfigurationName("DefaultLogger");
AppenderComponentBuilder appenderBuilder
= builder.newAppender("Console", "CONSOLE").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout"))
.addAttribute("pattern", pattern);
RootLoggerComponentBuilder rootLogger = builder.newRootLogger(logLevel);
rootLogger.add(builder.newAppenderRef("Console"));
builder.add(appenderBuilder);
builder.add(rootLogger);
Configurator.reconfigure(builder.build());
// rolling file
ConfigurationBuilder<BuiltConfiguration> builder2 = ConfigurationBuilderFactory.newConfigurationBuilder();
builder2.setStatusLevel(logLevel);
builder2.setConfigurationName("DefaultRollingFileLogger");
LayoutComponentBuilder layoutBuilder = builder2.newLayout("PatternLayout")
.addAttribute("pattern", pattern);
ComponentBuilder triggeringPolicy = builder2.newComponent("Policies")
.addComponent(builder2.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "10KB"));
ComponentBuilder filePolicy = builder2.newComponent("DefaultRolloverStrategy").addAttribute("max", 15);
AppenderComponentBuilder appenderBuilder2 = builder2.newAppender("LogToRollingFile", "RollingFile")
.addAttribute("fileName", fileName + ".log")
.addAttribute("filePattern", fileName + "-%i.log.")
.add(layoutBuilder)
.addComponent(triggeringPolicy)
.addComponent(filePolicy);
builder2.add(appenderBuilder2);
rootLogger.add(builder2.newAppenderRef("LogToRollingFile"));
builder2.add(rootLogger);
Configurator.reconfigure(builder2.build());
}
将 SizeBasedTriggeringPolicy 设置为 10KB(我使用较低的值进行测试)效果很好,但将 DefaultRolloverStrategy 设置为 15 个文件不起作用。我在这里做错了什么?它只保留原始文件,然后保留第二个文件(-1.log)。
仅供参考:我使用的是 Log4j 2.20.0 和 Java 8u381。
我想通了。文件末尾有一个额外的点Pattern。删除后,它按预期工作。
请注意原始问题和下面的代码片段的区别。
.addAttribute("filePattern", fileName + "-%i.log")