Я создаю регистратор log4j2 программным способом и добавляю к нему дополнения. Но я замечаю одну вещь: во время написания первого сообщения , сообщение журнала добавляется к заголовку.
Например,
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();
}
}
Почему это поведение и как мы можем сделать первое сообщение во второй строке