gpt4 book ai didi

node.js - 为所有模块设置默认的 winston 记录器

转载 作者:行者123 更新时间:2023-12-04 20:04:22 32 4
gpt4 key购买 nike

我正在尝试设置 winston 以与此处相同的方式在我的所有模块中工作:

using winston in several modules

但是我遇到了问题。

我已经设置了一个 logger.js 文件来配置控制台记录器:

var winston = require('winston');

var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
timestamp: true,
level: 'verbose',
colorize: true
})
]
});

module.exports = logger;

然后我在我的主 app.js 文件中要求该记录器:

var logger = require('./logger.js');
logger.info('Starting server'); // this console log looks great, just as I configured

但是,当我在所有其他模块中尝试 require winston 时,我丢失了在 logger.js 中为 winston 设置的配置

其他模块:

var logger = require('winston');
logger.info('in another module'); // this is back to winstons default console transport

根据我上面引用的链接,我应该能够在所有其他模块中要求 winston,并且我定义/配置的传输应该仍然相同。我唯一能想到的是,这对于控制台传输而言并非如此。如果不是什么给?如何配置控制台传输一次,然后在所有其他模块中使用 winston?

最佳答案

要使当前的解决方案起作用,您必须确保拥有一个版本的 winston。您不应该将它一次安装在您的主应用程序下,而另一次安装在您的其他模块下。然后在这里创建一个新的记录器实例,而不是使用默认实例。

你应该而不是上面这样做:

var winston = require('winston');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {
timestamp: true,
level: 'verbose',
colorize: true
});

我认为这应该可行。如果这不起作用,您可以尝试以下方法之一:

  • 让他们改用您的./logger 模块。这在作为应用代码库一部分的内部模块中非常有效。
  • 或者使您的其他模块可配置。做一些像 require('other-module').logger = require('./logger'); 或者 require('other-module').setLogger(require('./记录器'));。你可以查看this question如果您想了解更多有关此方法的信息。

关于node.js - 为所有模块设置默认的 winston 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713704/

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