gpt4 book ai didi

node.js - Winston Logging - 分离级别以分离传输

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:14 26 4
gpt4 key购买 nike

我使用 Winston 通过 2 种不同的传输方式进行日志记录 - 文件和 MongoDB。我已将 File 的级别设置为“INFO”,将 MongoDB 的级别设置为“ERROR”。如果我现在登录,

log.info('some info...');
log.warn('some Warning...');
log.error('some error...');

所有这些都会转到 LogFile,只有 Error 会转到 DB。我只想将信息消息转到文件,而不是其他消息。

我了解 Winston 中的系统日志级别,只有错误会转到 MongoDB,因为它是最高级别。由于 INFO 是较低级别,因此具有 INFO 或更高级别的任何日志都会进入文件(根据我的记录器定义)

我已阅读 here但找不到答案。即使我创建自定义级别,我怎么可能将每个传输限制为只有一个日志记录级别?

最佳答案

我已经在 another post 中回答了这个问题:


根据 Winston 的文档,默认行为是记录所有至少具有指定重要性(也称为日志记录级别)的消息。

Winston allows you to define a level property on each transport which specifies the maximum level of messages that a transport should log.

但是有一些方法可以达到你的要求。
我将尝试向您展示一些可能性,您可以选择最适合您的方法。


1。自定义传输(推荐):

您可以创建自定义传输并仅记录您想要的级别。
这是一个示例,仅供您引用:

let mainLogger = new (winston.Logger)({
transports: [
new (winston.transports.Console)(),
]
});

class CustomTransport extends winston.Transport {
constructor(options) {
super(options);
this.name = 'customLogger';
this.level = options && options.level || 'info';
this.levelOnly = options && options.levelOnly;
this.levels = options && options.levels || [];
}

log(level, msg, meta, callback) {
if (!this.levelOnly || this.levels.indexOf(level) > -1) {
mainLogger[level](msg, meta);
}
callback(null, true);
}
}

winston.transports.CustomTransport = CustomTransport;

let myLogger = new winston.Logger({
transports: [
new (winston.transports.CustomTransport)({
levelOnly: true,
levels: ['info'],
}),
]
});

myLogger.info('will be logged');
myLogger.warn('will NOT be logged');
myLogger.info('will be logged as well');

2。使用 winston-levelonly

This is a fork of the original winston package. The fork is at https://github.com/damianof/winston
This version adds a levelOnly option to make winston log only the specified level.


最后,我想鼓励您阅读这些相关讨论:

关于node.js - Winston Logging - 分离级别以分离传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23953232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com