# 日志收集

Corejs提供了高拓展性的日志收集系统:

说明

日志输出组提供了将一个或多个日志输出器进行组合的能力。

通常,我们通过定制日志输出器日志输出组的行为以将日志收集与业务逻辑结合。

日志输出器日志输出组在使用方式上非常相似:

  • 使用实例方法log输出日志:于执行过程中自动执行状态检测(可配置),在输出器/组处于启动状态时将输出日志。

  • 使用实例方法start启动输出器/组:于执行过程中自动执行状态检测(可配置),在输出器/组处于关闭状态时将创建基础资源(如:文件句柄等)并变更其为启动状态。

  • 使用实例方法close关闭输出器/组:于执行过程中自动执行状态检测(可配置),在输出器/组处于启动状态时将释放基础资源(如:文件句柄等)并变更其为关闭状态。

说明

日志输出组本质上是高阶日志输出器。因此,日志输出器/组的定制规则有一定的相似性。

但是,它们的实例获取方式和输出原理完全不同。

在获取方式上:

  • 日志输出器:使用new关键字和输出器配置直接实例化。
  • 日志输出组:首先,使用根据期望聚合的日志输出器构造的配置对象创建LoggerCore实例;然后,执行LoggerCore的实例方法createGroupLogger生成指定类型的日志输出组实例。

在输出原理上:

  • 日志输出器:按照输出模型进行日志输出。
  • 日志输出组:逐个调用其中聚合的日志输出器的实例方法log进行日志输出。

# 日志输出器

日志输出器可以在业务层中单独使用;也可以被聚合在日志输出组中作为单点输出模块。

Corejs内置了多种日志输出器以满足常规需求:


当内置输出器无法满足业务需求时,我们可以考虑:

# 日志输出组

日志输出组本身没有实际的日志输出能力,而是通过聚合一个或多个日志输出器实例,并逐个调用它们的实例方法log以实现日志多点输出。

通常,我们通过在自定义输出组时修改其实例方法startcloselog执行时的行为将日志收集与业务逻辑结合。

注意

日志输出组无法通过直接实例化得到其实例

在使用日志输出组时:

  1. 根据期望聚合的日志输出器构造的配置对象创建LoggerCore实例。

  2. 在执行LoggerCore的实例方法createGroupLogger指定期望使用的日志输出组类型以得到其实例。

因此,LoggerCore是生产日志输出组的工厂。