Почему приложение Log4j2 Appenders не добавляет первый заголовок в следующей строке в заголовок? - PullRequest
0 голосов
/ 21 января 2020

Я создаю регистратор 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();
    }
}

Почему это поведение и как мы можем сделать первое сообщение во второй строке

1 Ответ

1 голос
/ 22 января 2020

Ваш пример вывода показывает «dummyHeader», но ваш код показывает «заголовок». Если вы хотите новую строку, измените ее на "header \ n".

...