Node.js Winston日志logging

在我的节点应用程序中,我使用“Winston”日志logging在单独的文件中打印错误。

我遵循这个教程 。

当我试图从其他文件访问logging器….

我的代码:

var winston = require('winston'); var fs = require('fs'); fs.mkdir('./logs', function(err) { if (err) throw err; }); // Define levels to be like log4j in java var customLevels = { levels: { debug: 0, info: 1, warn: 2, error: 3 }, colors: { debug: 'blue', info: 'green', warn: 'yellow', error: 'red' } }; // create the main logger var logger = new(winston.Logger)({ level: 'debug', levels: customLevels.levels, transports: [ // setup console logging new(winston.transports.Console)({ level: 'info', // Only write logs of info level or higher levels: customLevels.levels, colorize: true }), // setup logging to file new(winston.transports.File)({ filename: './logs/project-debug.log', maxsize: 1024 * 1024 * 10, // 10MB level: 'debug', levels: customLevels.levels }) ] }); // create the data logger - I only log specific app output data here var datalogger = new (winston.Logger) ({ level: 'info', transports: [ new (winston.transports.File) ({ filename: './logs/project-data.log', maxsize: 1024 * 1024 * 10 // 10MB }) ] }); // make winston aware of your awesome colour choices winston.addColors(customLevels.colors); var Logging = function() { var loggers = {}; // always return the singleton instance, if it has been initialised once already. if (Logging.prototype._singletonInstance) { return Logging.prototype._singletonInstance; } this.getLogger = function(name) { return loggers[name]; } Logging.prototype.get = this.getLogger; loggers['project-debug.log'] = logger; loggers['project-data.log'] = datalogger; Logging.prototype._singletonInstance = this; }; new Logging(); // I decided to force instantiation of the singleton logger here logger.info('Logging set up OK!'); module.exports = Logging; 

错误正在抛出:

 Logging() is undefined. 

该教程似乎有一堆的错误。 我通过打电话来工作

 var logger = logging.Logging().get('project-debug.log'); 

注意参数中的.log 。 参数必须匹配loggers数组中定义的名称之一。

我花了几个小时,这是我的解决scheme:不要创build一个新的Logger ,只是改变默认的。

创build一个模块lib/logger.js

 var logger = require('winston'); logger.setLevels({debug:0,info: 1,silly:2,warn: 3,error:4,}); logger.addColors({debug: 'green',info: 'cyan',silly: 'magenta',warn: 'yellow',error: 'red'}); logger.remove(logger.transports.Console); logger.add(logger.transports.Console, { level: 'debug', colorize:true }); module.exports = logger; 

app.js使用:

 var logger = require('./lib/log.js'); 

从所有其他模块使用:

 var logger = require('winston'); 

我创build并解释的文件:

 var winston = require('winston'), winstonRedis = require('winston-redis').Redis; // TR: console'da sadece hepsi tutuluyor olacak çünkü info log seviyesinden sonra diğer tüm log seviyeleri sıralanmış // EN: all log level will be shown in Console, because 'info' is on the top of list with 0 value. var transportConsole = new winston.transports.Console({ json: false, timestamp: true, prettyPrint:true, colorize: true, level:'info' }), // TR: File'da sadece i ve db tutuluyor olacak çünkü i den sonra db log seviyesi sıralanmış // EN: 'i' and 'db' log levels will be shown in File, because db is after i and for File transport level is 'i' transportFileDebug = new winston.transports.File({ filename: __dirname + '/debug.log', json: true }), transportFileException = new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false }), // TR: rediste sadece db tutuluyor olacak çünkü db den sonra bir log seviyesi yok // EN: only 'db' will be stored in rediste because 'db' is the last one transportRedis = new (winstonRedis)({host: '127.0.0.1', port: 6379, level:'db'}); var logger = new (winston.Logger)({ levels: { info: 0, warn: 1, error: 2, verbose: 3, i: 4, db: 5 }, transports: [ transportConsole, transportFileDebug, transportRedis ], exceptionHandlers: [ transportConsole, transportFileException ], exitOnError: false }); winston.addColors({ info: 'green', warn: 'cyan', error: 'red', verbose: 'blue', i: 'gray', db: 'magenta' }); logger.i('iiiii foobar level-ed message'); logger.db('dbbbbb foobar level-ed message'); logger.info('infoo foobar level-ed message'); logger.warn('warnnnn foobar level-ed message'); logger.error('errroor foobar level-ed message'); module.exports = logger; 

我用winstondebugging日志logging,但它不是那么有效。 我面临类似的问题,有时也会崩溃。 我最近转向了mopublish团队使用的新模块。 这也很好,支持http通过摩根日志logging。 NPM模块elogger – https://github.com/techunits/elogger