如何使用 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);
我正在将代码从 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);