14

私は、数十のモジュールを備えた node.js アプリケーションに取り組んでおり、ロギングに bunyan を使用しています (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();

または要旨を表示

推奨事項はありますか?

編集:

コンストラクターを変更して、シングルトン パターンを明示的にしました (「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     
    });
};
4

2 に答える 2

23

nodejsのシングルトンパターン - 必要ですか? 実際、ノードの環境ではおそらくシングルトンは必要ありません。必要なのは、logger.js などの別のファイルにロガーを作成することだけです。

var bunyan = require("bunyan"); // バニヤン依存
var logger = bunyan.createLogger({name: "myLogger"});

module.exports = ロガー;

次に、このロガーを別のモジュールから取得します。

var logger = require("./logger");
logger.info("好きなもの");
于 2013-03-12T08:46:20.880 に答える
1

node.jsでexpressを使用している場合は、これを試すことができます。デフォルトでは、Expressではロギングが無効になっています。アプリでログを機能させるには、特定の操作を行う必要があります。アクセスログには、Loggerミドルウェアを使用する必要があります。エラーログにはForeverを使用します。お役に立てば幸いです。node.jsでアクセスとエラーをログに記録する方法の良い例を次に示します。

于 2012-12-08T05:11:23.063 に答える