gpt4 book ai didi

javascript - 使所有文件都可以访问 winston logger 变量

转载 作者:行者123 更新时间:2023-11-30 14:56:50 25 4
gpt4 key购买 nike

我正在编写一个由许多 Node js 脚本组成的 Node js 工具。对于日志记录,我使用的是 winston。但我面临一个问题。首先,我制作了一个单独的 JS 文件,它具有创建记录器和清除记录器传输的功能,它看起来如下所示:-

'use strict';

var winston = require('winston');
var logger;

function createLogger(service) {
logger = new (winston.Logger)({
level: 'info',
transports: [
new winston.transports.File(
{filename: ('logs/' + service + '_error.log'),
json: false})
]
});

return logger;
}

function clearLogger() {
logger.clear()
}

module.exports = {
createLogger: createLogger,
clearLogger: clearLogger,
logger: logger
};

让我们调用上面的文件作为 logger-handler.js。现在,最初从 A.js 开始,我用一些服务名称调用了 createLogger 函数。它被实例化了,我可以在 A.js 中使用它。 A.js 调用了一些函数,B.js 也调用了一些函数。现在,如果我想在 B.js 中使用相同的记录器,我会收到记录器未定义的错误。为了在 B.js 中使用,我做了如下操作:-

var logger = require('./logger-handler').logger;

我认为它应该可以工作,因为 logger 是全局变量,我在使用 B.js 之前已经初始化了它。但它将记录器变量分配为未定义。

有人可以帮助我做错什么吗?

最佳答案

你的记录器不是一个全局变量,他只存在于A.js中。如果你想让记录器成为一个全局变量 - 你必须通过将它分配给 global 变量来专门做,如下所示:

global.logger = logger;

注意事项:

为每个全局变量分配一个前缀是一种很好的做法,这样您就会知道这是一个全局变量。我使用 __ 作为前缀(双低破折号)

关于javascript - 使所有文件都可以访问 winston logger 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47125208/

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