使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,你必须特别地将它赋值给global
variables,如下所示:
global.logger = logger;
注意:
为每个全局variables分配一个前缀是一个很好的习惯,所以你会知道这是一个全局variables。 我使用__作为前缀(双低短划线)