Maven 日志记录

Maven 站点中提供了最终用户日志记录文档。本文档侧重于内部实现细节。

日志记录 API

Maven 使用Plexus Container logging API,就像任何其他 Plexus 组件一样,即LoggerManager / Logger

从 Maven 3.1.0 开始:

日志实现

Maven 3.1.0 与SLF4J 简单记录器捆绑在一起,但准备好使用其他日志记录实现:SLF4J 负责加载实现,称为“SLF4J 绑定”

日志配置加载实际上是通过日志实现完成的,没有任何 Maven 扩展来支持将 Maven 安装配置与每个用户的配置合并,例如:`$ maven.home /conf/logging` 目录被添加到核心的类路径中(请参阅`$ maven.主页/bin/m2.conf`)。有关文件名、格式等的详细信息,请参阅您的实施文档。

在 Maven 初始化期间,Maven 调整默认根日志记录级别以匹配 CLI 详细程度选择。由于此类功能在 SLF4J API 中不可用,因此需要将日志实现特定的扩展添加到 Maven 中以支持这些 CLI 选项:请参阅Slf4jConfigurationFactory / Slf4jConfiguration

获取记录器实例

Plexus Logger 和 LoggerManager 可以使用 Plexus 注解注入到 Plexus 组件中

import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;

@Component( role = MyComponent.class )
public class DefaultMyComponent
    implements MyComponent
{
    @Requirement
    private Logger logger;

    @Requirement
    private LoggerManager loggerManager;
}

从 Maven 3.1.0 开始,SLF4J Logger 也可以直接使用,无需 Plexus。当然,这只能在 Maven 3.1.0 下运行,那么这种技术只能在 Maven 核心组件或不需要与以前的 Maven 版本兼容的插件/组件中安全地使用。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClass
{
   final Logger logger = LoggerFactory.getLogger( MyClass.class );
}

记录器名称

在 Maven 3.1.0 之前,在 Maven 中完成日志记录实现,基本控制台日志记录实现不使用记录器名称:它们按原样,没有明确约定何时将记录器从类传递到类或何时创建新记录器.

从 Maven 3.1.0 开始,如果记录器名称定义明确,记录实现可能会发挥最大作用。这个定义仍然需要定义和实现:

  • 经典的“类名”模式?
  • 特定于 Maven 的名称层次结构?
  • 混合(一些具有类名,一些具有特定于 Maven 的层次结构)?