无法将winston放在nodejs模块中

时间:2017-01-16 03:32:20

标签: javascript node.js logging winston

我在模块中分离我的应用程序,但每个模块都有必须记录的功能。所以我的想法是创建一个文件winstonConfig.js来配置winston,然后我在每个需要记录的模块中require这个文件。这是winstonConfig.js:

var winston = require('winston');

winston.add(winston.transports.Riak, { level: 'warn' });

winston.add(winston.transports.File, { filename: 'mylogfile.log', level: 'silly' });

exports.log = winston.log;
exports.debug = winston.debug;
exports.error = winston.error;

(顺便问一下,有没有办法将所有东西一次导出?)

但是当我在index.js中要求('./ winstonConfig.js')时,我得到:

node_modules/winston/lib/winston/logger.js:481
  var instance = created ? transport : (new (transport)(options));
                                        ^

TypeError: transport is not a constructor

但是当放入index.js时,完全相同的代码(没有导出)将没有任何问题(问题是我无法将其导入其他模块)

2 个答案:

答案 0 :(得分:0)

我在新项目中遇到了同样的错误,但当我尝试使用" logger.transports.DailyRotateFile"时。然后我意识到我的代码(从另一个项目复制)只适用于winston 1(在另一个项目中使用的相同版本)。所以,我只是将lib降级为版本1,一切正常:

$ npm uninstall winston --save
$ npm install winston@1.x.x --save

但是如果你想使用winston 2,我发现下面的解决方案使用DailyRotateFile - 可能有类似的解决方案来使用其他类型的传输。

var winston = require('winston'), expressWinston = require('express-winston');
winston.transports.DailyRotateFile = require('winston-daily-rotate-file');

答案 1 :(得分:0)

看起来你错过了:

require('winston-riak');

我的代码出错了。

如果我注释掉Riak传输的添加,我没有错误。

如果我需要winston-riak:

var winston = require('winston');
require('winston-riak');

winston.add(winston.transports.Riak, { level: 'warn' });
winston.add(winston.transports.File, { filename: 'mylogfile.log', level: 'debug' });


exports.log = winston.log;
exports.debug = winston.debug;
exports.error = winston.error;

我收到错误:TypeError:riakjs.getClient不是函数。这似乎是因为' winston-riak'尝试执行riakjs.getClient(options)但是,根据https://github.com/mostlyserious/riak-js/issues/234,getClient是导出的函数,而不是导出对象的方法。 winston-riak模块已更新5年。它似乎与2年前更新的当前riak-js不兼容。