You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j2编程配置日志模式不生效问题求助

Log4j2编程式配置日志格式不生效问题解决

问题根源

你的代码存在变量名误用错误,导致自定义的PatternLayout未被正确绑定到Console Appender,Log4j2自动使用了默认的极简输出格式。

看这段出错的代码:

LayoutComponentBuilder layout = builder.newLayout("PatternLayout");
standard.addAttribute("pattern","%d [%-6p] %c{1} - %m%n");

console.add(standard);
  • 你创建了layout作为PatternLayout的实例,但后续操作的是未定义的standard变量
  • 最终错误地将不存在的standard添加到控制台Appender,真正配置好的layout完全未被使用

修复代码

将变量名统一,正确关联Layout到Console Appender:

ConfigurationBuilder<BuiltConfiguration> builder  = ConfigurationBuilderFactory.newConfigurationBuilder();

AppenderComponentBuilder console = builder.newAppender("stdout","Console");
builder.add(console);

FilterComponentBuilder flow = builder.newFilter("MarkerFilter",Filter.Result.ACCEPT,Filter.Result.DENY);
flow.addAttribute("marker","FLOW");

console.add(flow);

// 修正变量名,正确配置并关联Layout
LayoutComponentBuilder layout = builder.newLayout("PatternLayout");
layout.addAttribute("pattern","%d [%-6p] %c{1} - %m%n");

console.add(layout);

RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Level.DEBUG);
rootLogger.add(builder.newAppenderRef("stdout"));

builder.add(rootLogger);

Configurator.initialize(builder.build());    

原理说明

当Console Appender未指定Layout时,Log4j2会默认使用SimpleLayout,该布局仅输出日志消息文本,这就是你只看到Application has started!的原因。修复变量名错误后,自定义的PatternLayout会生效,就能输出包含时间、级别、类名的完整日志格式。

内容的提问来源于stack exchange,提问作者Factor Three

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:53:14