如何用编程方式(代码)配置 Log4j 的 Logger?

Log4j 编程式配置:Log4j 1.x 用 BasicConfigurator/DOMConfigurator 或直接操作 Logger 层级;Log4j 2 用 ConfigurationBuilderFactory 构建配置。本文给出两代 API 的代码示例。

最佳实践
如何用编程方式(代码)配置 Log4j 的 Logger?封面

Log4j 2 的编程式配置用 ConfigurationBuilderFactory 构建 Configuration 对象并启动 LoggerContext;老的 Log4j 1.x 则直接 Logger.getRootLogger().addAppender(...)。现代项目建议仍以配置文件为主、编程配置用于测试与动态场景。

Log4j 2 方式

ConfigurationBuilder<BuiltConfiguration> builder =
    ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.ERROR);
builder.add(builder.newAppender("Stdout", "Console")
    .add(builder.newLayout("PatternLayout")
        .addAttribute("pattern", "%d %-5p [%t] %m%n")));
builder.add(builder.newRootLogger(Level.INFO).add(builder.newAppenderRef("Stdout")));

Configurator.initialize(builder.build());
Logger log = LogManager.getLogger(MyClass.class);
log.info("编程式配置生效");

Log4j 1.x(遗留系统)

BasicConfigurator.configure();   // 最简:控制台输出
// 或细粒度:
Logger root = Logger.getRootLogger();
root.setLevel(Level.INFO);
root.addAppender(new FileAppender(new PatternLayout("%d %-5p %m%n"), "app.log"));

常见问题(FAQ)

Q:编程配置和 log4j2.xml 谁优先? 后初始化的生效;编程初始化(Configurator.initialize)会覆盖默认加载。

Q:单元测试里怎么静默日志? 编程方式把 root level 设为 OFF,测试后恢复。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台