【发布时间】:2017-11-05 18:41:44
【问题描述】:
我正在编写一个由许多节点 js 脚本组成的节点 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 吗?看起来你可能在实例化之前已经导入了 b 。另外我不明白你为什么需要公开
createLogger,为什么不立即实例化记录器并公开logger和clearLogger
标签: javascript node.js logging winston