Logging 编程log4j2配置不工作

Logging 编程log4j2配置不工作,logging,configuration,log4j2,Logging,Configuration,Log4j2,我试图以编程方式配置log4j2,方式与docs()类似: 但是,它不是使用我们指定的日志格式,而是使用简单的转换模式——甚至不是默认格式!是否有一些记录器日志记录我可以打开以了解它为什么这样做-状态跟踪日志记录仅在启动和关闭时进行?我刚刚尝试了您的确切示例,我可以在控制台上看到Log4j2状态记录器输出以及应用程序测试消息。以上是你的程序所做的一切吗?我无法重现该问题。如果您仅在错误级别登录时看到输出,则表明默认配置处于活动状态,而不是您在上述程序中指定的配置。不知道上面的程序怎么会发生这种情

我试图以编程方式配置log4j2,方式与docs()类似:


但是,它不是使用我们指定的日志格式,而是使用简单的转换模式——甚至不是默认格式!是否有一些记录器日志记录我可以打开以了解它为什么这样做-状态跟踪日志记录仅在启动和关闭时进行?

我刚刚尝试了您的确切示例,我可以在控制台上看到Log4j2状态记录器输出以及应用程序测试消息。以上是你的程序所做的一切吗?我无法重现该问题。如果您仅在错误级别登录时看到输出,则表明默认配置处于活动状态,而不是您在上述程序中指定的配置。不知道上面的程序怎么会发生这种情况。
Configurator.initialize
是否替换了所有现有的静态配置?是否需要对返回的
LoggerContext
对象执行某些操作?现有的静态配置可能不受上述编程配置的影响(因此它可能会保持先前的配置:仅控制台配置的默认错误)。不确定。我没有对返回的LoggerContext执行任何操作,我完全按照您的代码执行。但是我的测试程序只有你显示的代码。没有静态初始化或任何东西。在进行其他静态初始化之前,您可以首先进行配置吗?啊,就是这样-看起来在重新配置之前不能进行任何日志初始化(包括
LogManager.getLogger
),否则会混淆
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.TRACE);
builder.setConfigurationName("Config");
AppenderComponentBuilder console = builder.newAppender("Stdout", "Console")
        .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT)
        .add(builder.newLayout("PatternLayout").addAttribute("pattern", logFormat));
builder.add(console);
builder.add(builder.newRootLogger(Level.DEBUG).add(builder.newAppenderRef("Stdout")));
Configurator.initialize(builder.build());

LogManager.getLogger("foo.bar").debug("TestMsg");
Configurator.setRootLevel(Level.DEBUG);