配置 Plexus 日志记录

Posted

技术标签:

【中文标题】配置 Plexus 日志记录【英文标题】:Configuring Plexus Logging 【发布时间】:2018-07-02 09:21:03 【问题描述】:

我有一个使用 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 被注入到组件中?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于配置 Plexus 日志记录的主要内容,如果未能解决你的问题,请参考以下文章

在Windows7上配置管理IIS日志记录

设置日志不记录指定类型的文件,日志文件的切割

Python logging模块使用配置文件记录日志

Laravel 日志配置以及设置按日期记录日志

访问日志不记录静态文件配置访问日志切割配置静态元素过期时间

REDHAT一总复习1 记录systemd日志条目 rsyslogd配置记录日志指令