我正在以编程方式创建一个 log4j2 记录器并向其添加附加程序。 但我注意到的一件事是,在写入第一条日志消息时,日志消息会附加到 header 中。
例如
header[2020-01-21 21:16:07,176][ERROR] - the error message
[2020-01-21 21:16:07,176][ERROR] - text message
预期的是:
header
[2020-01-21 21:16:07,176][ERROR] - the error message
[2020-01-21 21:16:07,176][ERROR] - text message
下面是我试图实现此目的的代码片段:
@SpringBootApplication
public class Log4j2TestApplication {
public static void main(String[] args) {
SpringApplication.run(Log4j2TestApplication.class, args);
String loggerName = "testLogger";
final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
final LoggerComponentBuilder loggerComp = builder.newLogger(loggerName, Level.ALL).addAttribute("additivity",
false);
builder.add(loggerComp);
builder.setConfigurationSource(null);
Configuration configuration = builder.build();
LoggerContext ctx = Configurator.initialize(builder.build());
ctx.start(configuration);
ctx.updateLoggers(configuration);
Logger logger = ctx.getLogger(loggerName);
Appender textAppender = createTextAppender(configuration);
textAppender.start();
logger.addAppender(textAppender);
logger.error("the error message", "Test Paramter");
logger.error("text message", "Test Paramter");
textAppender.stop();
}
private static Appender createTextAppender(final Configuration config) {
final Layout<String> layout = getTextLayout(config, "header");
return RollingFileAppender.newBuilder().setConfiguration(config).setName("txtAppender")
.withFileName("TestFile.text").withFilePattern("TestFile.txt")
.withPolicy(SizeBasedTriggeringPolicy.createPolicy("100M"))
.withStrategy(DefaultRolloverStrategy.newBuilder().withConfig(config).build()).withImmediateFlush(true)
.setFilter(ThresholdFilter.createFilter(Level.ALL, Result.ACCEPT, Result.DENY)).setLayout(layout)
.build();
}
private static Layout<String> getTextLayout(final Configuration config, final String header) {
return PatternLayout.newBuilder().withConfiguration(config).withCharset(StandardCharsets.UTF_8)
.withPattern("[%d][%-5.-5p] - %m%n").withHeader(header).build();
}
}
为什么会出现这种行为以及我们如何将第一条消息放到第二行?
最佳答案
您的示例输出显示“dummyHeader”,但您的代码显示“header”。如果您想要换行符,请将其更改为“header\n”。
关于java - 为什么 Log4j2 Appender 不将下一行中的第一个日志添加到 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59841846/