常见的节点logging,快速应用 – 最佳实践?

我正在使用几十个模块和使用bunyan进行日志logging(JSON输出,多个可configurationstream)的node.js应用程序。 我一直在寻找如何在所有模块中实现一个实例的好例子,但是还没有看到什么似乎是我可以从中学习的一个非常干净的例子。

下面说明了一种可行的方法,但对我来说似乎相当不雅(丑陋)。 一般来说,我是新来的节点&commonjs的JavaScript,所以寻找如何改善它的build议。

模块:./lib/logger

// load config file (would like this to be passed in to the constructor) nconf.file({ file: fileConfig}); var logSetting = nconf.get('log'); // instantiate the logger var Bunyan = require('bunyan'); var log = new Bunyan({ name: logSetting.name, streams : [ { stream : process.stdout, level : logSetting.stdoutLevel}, { path : logSetting.logfile, level : logSetting.logfileLevel} ], serializers : Bunyan.stdSerializers }); function Logger() { }; Logger.prototype.info = function info(e) { log.info(e) }; Logger.prototype.debug = function debug(e) { log.debug(e) }; Logger.prototype.trace = function trace(e) { log.trace(e) }; Logger.prototype.error = function error(e) { log.error(e) }; Logger.prototype.warn = function warn(e) { log.warn(e) }; module.exports = Logger; 

模块:主应用程序

 // create the logger var logger = require('./lib/logger) var log = new logger(); // note: would like to pass in options --> new logger(options) module: any project module using logger // open the logger (new, rely on singleton...) var logger = require('./lib/logger'); var log = new logger(); 

或查看要点

有什么build议?

编辑:

我修改了构造函数,使单例模式显式化(而不是作为“require”行为的一部分)。

 var log = null; function Logger(option) { // make the singleton pattern explicit if (!Logger.log) { Logger.log = this; } return Logger.log; }; 

然后更改初始化以获取选项参数

 // initialize the logger Logger.prototype.init = function init(options) { log = new Bunyan({ name: options.name, streams : [ { stream : process.stdout, level : options.stdoutLevel}, { path : options.logfile, level : options.logfileLevel} ], serializers : Bunyan.stdSerializers }); }; 

nodejs中的单例模式 – 是否需要? 实际上,在Node环境中可能不需要单例。 所有你需要做的就是创build一个单独的文件logging器说logger.js:

 var bunyan = require(“bunyan”);  // Bunyan依赖
 var logger = bunyan.createLogger({name:“myLogger”});

 module.exports = logger;

然后,从另一个模块中检索这个logging器:

 var logger = require(“./logger”);
 logger.info(“你喜欢的任何东西”);

如果你使用express和node.js,那么你可以试试这个。 默认情况下,在Express中禁用日志logging。 你必须做一些东西来获取适用于你的应用程序的日志。 对于访问日志,我们需要使用Logger中间件; 对于错误日志,我们将使用Forever.Hope它会帮助你..这里是一个很好的例子如何logging node.js 访问和错误