我有一个使用Plexus日志设备的图书馆。我的项目使用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");但这并没有对实际注入的记录器实例产生影响。我的是,可以使用container.lookup(Logger.class)从容器中获得Logger实现,但是组件仍然使用它的ConsoleLogger。
为了纠正这种情况,我尝试注册一个LoggerManager,它可以构造我的记录器实现,如下所示:
// code from above, and additionally
container.releaseAll(container.lookupList(LoggerManager.class));
container.addComponent(new NoOpLoggerManager(), LoggerManager.class, "default");虽然我现在也可以从容器中获得我的LoggerManager,但是ConsoleLogger仍然被注入到库的组件中。
如何确保将NoOpLogger注入到组件中?
发布于 2018-01-23 14:07:24
由Logger注入的DefaultPlexusContainer实现不是通过从组件中查找它们来获得的。
相反,您需要像这样通过LoggerManager通过DefaultPlexusContainer#setLoggerManager绑定:
DefaultPlexusContainer container = new DefaultPlexusContainer();
container.setLoggerManager(new NoOpLoggerManager());
// other componentshttps://stackoverflow.com/questions/48403697
复制相似问题