如何在Log4j2中为Logger添加appender

vjrehmav  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(239)

在Log4j 1.2中,你可以简单地在运行时获取一个logger并添加一个appender。例如,这对于测试目的来说是很方便的。我们曾经创建一个mock appender并将其添加到logger中。随后,我们可以做出不同的Assert。
log4j2的等价物是什么?
例如,这个example显示了其他人是如何添加测试追加器的。
log4j2页面显示了一些关于如何添加附加器的示例。但是,它们将附加器添加到整个上下文。这似乎与为一个特定的日志程序添加附加器不同。
另一个观察结果是,如果你使用org.apache.logging.log4j.core.Logger而不是org.apache.logging.log4j.Logger,你仍然可以添加appender。然而,大多数人使用org.apache.logging.log4j.Logger。事实上,LogManager返回org.apache.logging.log4j.Logger的一个示例。所以,我不确定如何连接这两个类,以及它们是否应该连接。
另一个观察结果是如果我调用

LogManager.getContext().getConfiguration().getLoggers()

我可以获得上下文中所有LoggerConfig对象的列表,然后向任何LoggerConfig对象添加appender,但问题是,如何获得与org.apache.logging.log4j.Logger示例相关的LoggerConfig?
这让我很困惑。

eoigrqb6

eoigrqb61#

org.apache.logging.log4j.Logger是位于log4j-api模块中的接口。org.apache.logging.log4j.core.Logger是位于log4j-core模块中的具体类(实现上述接口)。
LogManager(也在log4j-api模块中)返回实现org.apache.logging.log4j.Logger接口的内容,如果log4j-core模块在类路径中,则它将是org.apache.logging.log4j.core.Logger的一个示例。
因此,您可以将返回的Logger强制转换为org.apache.logging.log4j.core.Logger并添加Appender。
每个核心Logger都有一个LoggerConfig(一对一的关系)。您可以找到与所需Logger对应的LoggerConfig,因为它们具有相同的名称。

相关问题