0

我有一个使用 Plexus Logging 设施的库。我的项目使用 slf4j-simple 通过 slf4j 配置它自己的日志记录。

我试图通过simplelogger.properties使用静音库中的日志记录

org.slf4j.simpleLogger.log.com.acme.lib=off

这没有效果。

调试到罪魁祸首类,我发现它注入了一个org.codehaus.plexus.logging.Logger. 每当我从容器中获取我的组件时,它Logger就是一个org.codehaus.plexus.logging.console.ConsoleLogger.

我试图绑定我自己的记录器的 NoOp 实现以进行注入,如下所示:

PlexusContainer container = new DefaultPlexusContainer();
// other components
// remove all Logger components
container.releaseAll(container.lookupList(Logger.class));
container.addComponent(new NoOpLogger(), Logger.class, "default");

但这对实际注入的记录器实例没有影响。我能够使用 . 从容器中获取我的 Logger 实现container.lookup(Logger.class),但组件仍然使用它的ConsoleLogger.

为了解决这个问题,我尝试注册一个LoggerManager构造我的记录器实现的方法,如下所示:

// code from above, and additionally
container.releaseAll(container.lookupList(LoggerManager.class));
container.addComponent(new NoOpLoggerManager(), LoggerManager.class, "default");

虽然我现在也可以LoggerManager从容器中获取我的,但仍然ConsoleLogger被注入到库的组件中。

我怎样才能确保我NoOpLogger的被注入到组件中?

4

1 回答 1

0

Logger注入的实现DefaultPlexusContainer不是通过从组件中查找得到的。

相反,您需要像这样绑定 LoggerManager DefaultPlexusContainer#setLoggerManager

DefaultPlexusContainer container = new DefaultPlexusContainer();
container.setLoggerManager(new NoOpLoggerManager());
// other components
于 2018-01-23T14:07:24.327 回答