我刚刚查看了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
到底有什么用呢?
2条答案
按热度按时间yb3bgrhw1#
首先,设置Winston记录器,使其侦听
info
级别或更低级别的所有消息(这些日志级别符合通用rfc5424级别集explained on page 11)。我们还没有说该如何处理这些数据,我们只是告诉它忽略任何比info
更不严重的数据。您可以在顶级以及每个传输的级别定义级别,因此基本上在您的示例中,如果您定义了任何传输,例如。
然后我们设置单独的日志传输程序,通过将数据传输到某个地方来处理这些数据。但是,您不一定要将同一个消防水带指向所有目标,因此在本例中,我们有两个“传输到文件”条目,一个只记录错误或更严重的错误到名为
error.log
的文件,以及一个将“Winston设置为侦听的所有内容”记录到名为combined.log
的文件中(因为我们将其配置为“info or more severe”,该文件将永远不会包含debug
或silly
消息,因为这将不在Winston记录器设置为查看的数据中)ni65a41a2#
就像你引用的文件中所说的:
winston允许您在每个传输上定义一个级别属性,该属性指定传输应记录的最大消息级别
因此,从上面显示的级别来看,例如
debug
将记录所有内容,info
会记录除debug
之外的所有内容,或者crit
将会记录emerg
、alter
和crit
此外,如果没有为传输明确定义,则传输将使用与顶层定义的默认日志级别相同的日志级别。
因此,对于给定的配置,默认日志记录级别为
info
,所有比info
“不太重要”的内容都会被winston忽略。因此,combined.log
也将具有相同的级别,并且将包含除级别debug
之外的所有日志消息。。。文件
error.log
的第二个传输已将级别明确定义为error
,因此只包含级别error, crit, alert, emerg
中的消息。例如,这样做的目的可能是,创建一个仅包含错误消息的删除错误日志,以及一个包含所有消息的日志。。。