gpt4 book ai didi

javascript - Node 的通用日志记录,快速应用程序——最佳实践?

转载 作者:IT老高 更新时间:2023-10-28 23:07:21 25 4
gpt4 key购买 nike

我正在开发一个带有几十个模块并使用 bunyan 进行日志记录的 node.js 应用程序(JSON 输出、多个可配置的流)。我一直在寻找如何在所有模块中实现实例的好例子,但还没有看到我可以从中学习的看起来非常干净的例子。

下面说明了一种可行的方法,但对我来说似乎很不优雅(丑陋)。我一般是 node 和 commonjs javascript 的新手,所以寻找有关如何改进它的建议。

模块:./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();

view the gist

有什么建议吗?

编辑:

我已经修改了构造函数,使单例模式显式(而不是隐式作为“要求”行为的一部分。

var log = null;
function Logger(option) {

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

然后把初始化改成带个options参数

// 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
});
};

最佳答案

Singleton pattern in nodejs - is it needed?实际上,Node 的环境中可能不需要单例。您需要做的就是在一个单独的文件中创建一个记录器,例如 logger.js:

var bunyan = require("bunyan"); // Bunyan dependencyvar logger = bunyan.createLogger({name: "myLogger"});module.exports = logger;

然后,从另一个模块中检索此记录器:

var logger = require("./logger");logger.info("Anything you like");

关于javascript - Node 的通用日志记录,快速应用程序——最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com