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
相关产品推荐
相关产品推荐

