将第三方库的 Log4j 日志路由到 Log4j2

Route 3rd party libraries' Log4j logging to Log4j2

我的 Java 应用程序使用 Log4j2 作为其日志记录实现,依赖于使用 Log4j 的第 3 方库。

我正在尝试在我的应用程序中(使用下面的代码)为这些第 3 方记录器以编程方式设置根记录器附加程序和日志级别,但是这些第 3 方库的记录器仍然没有记录到 myAppender:

LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
LoggerConfig loggerConfig = ctx.getConfiguration().getLoggerConfig(
        LogManager.ROOT_LOGGER_NAME);
loggerConfig.addAppender(myAppender, Level.ERROR, null);
ctx.updateLoggers();

我想到的一个解决方案是使用 Log4jToSLF4JAdaptor 将 log4j 的日志记录路由到 SLF4J,然后使用 Log4JSLF4JImpl 将 SLF4J 的日志记录路由到我的 Log4J2 实现,但如此处所述 (https://logging.apache.org/log4j/2.0/log4j-slf4j-impl/index.html),它会导致无限路由.

你能建议我如何将这些第 3 方库的日志记录路由到 myAppender 吗?

在这里得到了我的答案:Configuring log4j2 and log4j using a single log4j2 xml file

基本上,我们需要使用 log4j-1.2-api-2.0.jar 将我们的应用程序对 log4-1.2 API 进行的所有调用路由到 log4j2 实现。

对于使用 Log4j 的第三方库 1.x API:除了 log4j-api 和 log4j-core jar 文件之外,您还需要添加 log4j-1.2- api jar 文件到你的类路径。

对于使用 SLF4J API 的第三方库:将 log4j-api、log4j-core 和 log4j-slf4j-impl jar 文件添加到类路径中(您还需要 slf4j API罐子)。

对于使用 JUL 的第 3 方库 (java.util.logging):将 log4j-api、log4j-core 和 log4j-jul jar 文件添加到您的类路径,并设置系统 属性 java.util.logging.managerorg.apache.logging.log4j.jul.LogManager.