配置Plexus日志记录

时间:2018-01-23 14:07:24

标签: java logging plexus

我有一个使用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");

但这对实际注入的记录器实例没有影响。 我 能够使用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注入组件?

1 个答案:

答案 0 :(得分:0)

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

相反,您需要通过DefaultPlexusContainer#setLoggerManager绑定LoggerManager,如下所示:

DefaultPlexusContainer container = new DefaultPlexusContainer();
container.setLoggerManager(new NoOpLoggerManager());
// other components