如何在Log4j2中将追加器添加到Logger

在Log4j 1.2中,您可以简单地使用记录器并在运行时添加一个appender.例如,这对于测试目的而言非常方便.我们曾经创建了一个模拟appender并将其添加到记录器中.随后我们可以做出不同的断言.

与log4j2有什么相同之处?

例如,这个example显示了其他人如何添加测试appender.

log4j2页面显示了一些有关如何添加appender的示例.但是,它们会在整体上下文中添加appender.这似乎与为一个特定记录器添加appender不同.

另一个观察是,如果你使用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对象的ist.我随后将appender添加到任何LoggerConfig对象.但问题是,如何获取与org.apache.logging.log4j.Logger实例相关的LoggerConfig?

这让我很困惑.

解决方法:

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(1对1关系).您可以找到与所需Logger对应的LoggerConfig,因为它们具有相同的名称.

上一篇:对于UDS(ISO14229-2006) 汉译的声明(必读)


下一篇:volley Json数据获取及解析(备忘)