如何使用 Log4J 2.X 在文件中编写特定的记录器? (在 JAVA 中编程)

How to write a specific logger in a file with Log4J 2.X ? (progammaticaly in JAVA)

我正在将代码从 Log4j 1.X 升级到 Log4J 2.X。

我想使用 Log4j 2.X 在文件中编写特定的记录器。我尝试了一些在 Log4j 网站上找到的代码,但我似乎找不到任何具有相同功能的代码。

Log4j 1.X 代码:

    Logger LOCAL_LOGGER = Logger.getLogger(MyClass.class.getName());
    
    PatternLayout layout = new PatternLayout("mylayoutpattern");
    String logFile = "myFile";
    
    FileAppender app = new FileAppender(layout, logFile, true);
    
    LOCAL_LOGGER.addAppender(app);
    LOCAL_LOGGER.setLevel(Level.ERROR);

在 Log4j 2.x 中引入了两个与您的代码有关的主要更改:

  • 库分为 API 部分和标准实现部分。从对 LogManager.getLogger 的调用返回的 API 接口 org.apache.logging.log4j.Logger 与布局和附加程序无关。但是,如果您确定底层实现是 Log4j2 Core,则可以将其转换为 org.apache.logging.log4j.core.Logger(在以下代码中为 Logger)并像往常一样继续操作。
  • 无法直接构建组件,需要使用 Log4j 中引入的构建器模式 2.x。

总结为以下代码:

Logger logger = (Logger) LogManager.getLogger(MyClass.class.getName());
final PatternLayout layout = PatternLayout.newBuilder()//
                                          .withPattern("mylayoutpattern")
                                          .build();
final FileAppender appender = FileAppender.newBuilder()//
                                          .setLayout(layout)
                                          .withFileName("myFile")
                                          .withAppend(true)
                                          .build();
logger.addAppender(appender);
logger.setLevel(Level.ERROR);