在最高范围内定义级别的具体用途是什么?

brvekthn  于 2022-10-22  发布在  Java
关注(0)|答案(2)|浏览(408)

我刚刚查看了Winston记录器使用指南,发现了以下用法:

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  defaultMeta: { service: 'user-service' },
  transports: [
    //
    // - Write all logs with importance level of `error` or less to `error.log`
    // - Write all logs with importance level of `info` or less to `combined.log`
    //
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
  ],
});

如果要使用level: 'error',那么定义level: 'info',有什么用?或者是后者重写了level: 'info',,因为根据文档,外部level执行以下操作:
仅当info.level小于或等于此级别时记录
那么,在最上面的范围中定义level到底有什么用呢?

yb3bgrhw

yb3bgrhw1#

首先,设置Winston记录器,使其侦听info级别或更低级别的所有消息(这些日志级别符合通用rfc5424级别集explained on page 11)。我们还没有说该如何处理这些数据,我们只是告诉它忽略任何比info更不严重的数据。
您可以在顶级以及每个传输的级别定义级别,因此基本上在您的示例中,如果您定义了任何传输,例如。

new winston.transports.File({ filename: 'combined.log' }),

然后我们设置单独的日志传输程序,通过将数据传输到某个地方来处理这些数据。但是,您不一定要将同一个消防水带指向所有目标,因此在本例中,我们有两个“传输到文件”条目,一个只记录错误或更严重的错误到名为error.log的文件,以及一个将“Winston设置为侦听的所有内容”记录到名为combined.log的文件中(因为我们将其配置为“info or more severe”,该文件将永远不会包含debugsilly消息,因为这将不在Winston记录器设置为查看的数据中)

ni65a41a

ni65a41a2#

就像你引用的文件中所说的:
winston允许您在每个传输上定义一个级别属性,该属性指定传输应记录的最大消息级别
因此,从上面显示的级别来看,例如debug将记录所有内容,info会记录除debug之外的所有内容,或者crit将会记录emergaltercrit
此外,如果没有为传输明确定义,则传输将使用与顶层定义的默认日志级别相同的日志级别。
因此,对于给定的配置,默认日志记录级别为info,所有比info“不太重要”的内容都会被winston忽略。因此,combined.log也将具有相同的级别,并且将包含除级别debug之外的所有日志消息。。。
文件error.log的第二个传输已将级别明确定义为error,因此只包含级别error, crit, alert, emerg中的消息。
例如,这样做的目的可能是,创建一个仅包含错误消息的删除错误日志,以及一个包含所有消息的日志。。。

相关问题