使winstonlogging器variables可以访问所有文件

我正在写一个由许多节点js脚本组成的节点js工具。 为了logging,我正在使用winston。 但是我面临着一个问题。 首先,我创build了一个单独的JS文件,它具有创buildlogging器和清除logging器传输的function,它看起来如下所示:

'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中使用相同的logging器,我得到错误,logging器是未定义的。 为了在B.js中使用,我做了如下的事情:

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

我认为它应该工作,因为logging器是全局variables,我已经初步化之前来B.js. 但它是分配logging器variables未定义。

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

你的logging器不是全局variables,他只存在于A.js. 如果你想让logging器成为一个全局variables,你必须特别地将它赋值给globalvariables,如下所示:

 global.logger = logger; 

注意:

为每个全局variables分配一个前缀是一个很好的习惯,所以你会知道这是一个全局variables。 我使用__作为前缀(双低短划线)