我在模块中分离我的应用程序,但每个模块都有必须记录的功能。所以我的想法是创建一个文件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时,完全相同的代码(没有导出)将没有任何问题(问题是我无法将其导入其他模块)
答案 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不兼容。