节点常用的日志记录,Express应用程序 - 最好的做法?(Common logging for

2019-07-04 17:34发布

我正在与几十个模块的Node.js应用程式和使用本仁用于记录(JSON输出,多种配置的视频流)。 我一直在寻找如何实现跨所有模块实例很好的例子,但还没有看到这似乎是一个非常干净的例子,我可以借鉴。

下面说明工作的方法,但似乎相当不雅(丑陋的)给我。 我是新来的节点&一般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();

或查看要旨

任何建议?

编辑:

我已经修改了构造,使得单件模式明确的(而不是隐含的“要求”行为的一部分。

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

Answer 1:

需要它-在辛格尔顿的NodeJS模式? 其实,也许并不需要节点的环境下单。 所有你需要做的是建立在一个单独的文件中记录说,logger.js:

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

module.exports = logger;

然后,从另一模块此记录:

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


Answer 2:

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



文章来源: Common logging for node, express application — best practice?