Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Log4j2追加器不将下一行中的第一个日志添加到头中?_Java_Logging_Log4j2 - Fatal编程技术网

Java 为什么Log4j2追加器不将下一行中的第一个日志添加到头中?

Java 为什么Log4j2追加器不将下一行中的第一个日志添加到头中?,java,logging,log4j2,Java,Logging,Log4j2,我正在以编程方式创建一个log4j2记录器,并向其添加appender。 但我注意到的一点是,在编写第一条日志消息时,日志消息被附加到头中 比如说 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

我正在以编程方式创建一个log4j2记录器,并向其添加appender。 但我注意到的一点是,在编写第一条日志消息时,日志消息被附加到头中

比如说

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();
    }
}
@springboot应用程序
公共类Log4j2TestApplication{
公共静态void main(字符串[]args){
run(Log4j2TestApplication.class,args);
字符串loggerName=“testLogger”;
final ConfigurationBuilder=ConfigurationBuilderFactory.newConfigurationBuilder();
最终LoggerComponentBuilder loggerComp=builder.newLogger(loggerName,Level.ALL).addAttribute(“可加性”,
假);
建造商添加(loggerComp);
builder.setConfigurationSource(空);
配置=builder.build();
LoggerContext ctx=Configurator.initialize(builder.build());
启动(配置);
更新记录器(配置);
Logger Logger=ctx.getLogger(loggerName);
Appender textapper=createtextapper(配置);
textAppender.start();
logger.addAppender(textpappender);
logger.error(“错误消息”、“测试参数”);
logger.error(“文本消息”、“测试参数”);
textAppender.stop();
}
专用静态Appender createTextAppender(最终配置){
最终布局=getTextLayout(配置,“标题”);
返回RollingFileAppender.newBuilder().setConfiguration(config).setName(“txtAppender”)
.withFileName(“TestFile.text”).withFilePattern(“TestFile.txt”)
.withPolicy(SizeBadeTriggeringPolicy.createPolicy(“100M”))
.withStrategy(DefaultRolloverStrategy.newBuilder().withConfig(config.build()).withImmediateFlush(true)
.setFilter(ThresholdFilter.createFilter(Level.ALL、Result.ACCEPT、Result.DENY)).setLayout(布局)
.build();
}
私有静态布局getTextLayout(最终配置配置,最终字符串头){
返回PatternLayout.newBuilder().withConfiguration(config).withCharset(StandardCharsets.UTF_8)
.withPattern(“[%d][%5.-5p]-%m%n”).withHeader(header.build();
}
}

为什么会出现这种行为?我们如何将第一条消息发送到第二行?

您的示例输出显示“dummyHeader”,但您的代码显示“header”。如果需要换行符,请将其更改为“header\n”

在添加
loggerName
?示例输出显示“dummyHeader”,但代码显示“header”。如果您需要换行符,请将其更改为“header\n”。很抱歉,我想我不明白,为什么我要附加loggerName以及它应该附加在哪里?@rgoers它只是供参考,但我根据程序更改为输出。而且您正确的“header\n”工作。谢谢,但是,我认为记录器的默认行为不应该附加到标题,而是将消息记录到下一行。这样做是因为很容易说您想要一个新行,很难说您不想要一个。