69

私はいくつかのモジュールを持っています - たとえば、server.js、module1.js、...、moduleN.js としましょう。

server.js でログ ファイルを定義したいと思います。

winston.add(winston.transports.File, { filename: 'mylogfile.log' });

そして、それをすべてのモジュールで使用します。

それを行う最善の方法は何ですか?exports.winston=winston;各モジュールでそれを server.js に設定できますが、より良い解決策はありますか?

前もって感謝します!

4

11 に答える 11

13

私がしていること (これは最善の方法ではないかもしれません) は、アプリケーションで使用するすべてのものをエクスポートする「グローバル」モジュールを使用することです。例えば:

//Define your winston instance
winston.add(winston.transports.File, { filename: 'mylogfile.log' });
exports.logger = winston;

exports.otherGlobals = ....

他のモジュールからこのグローバルに使用されるモジュールを必要とするだけです

var Global = require(/path/to/global.js);

ファイルは最初にロードされた後にキャッシュされるため (グローバルにログ ステートメントを含めることで確認できます。一度だけログに記録されます)、再度含めることによるオーバーヘッドはほとんどありません。すべてを 1 つのファイルにまとめることは、すべてのページでグローバルに使用されるすべてのモジュールを要求するよりも簡単です。

于 2013-01-25T23:02:25.387 に答える
12

カスタムの色とレベルを使用したかったのです。

だから私はデフォルトのコンソールトランスポートを削除し、色付きのものを設定しました

ここに私の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');        
于 2014-04-27T23:00:50.550 に答える
7

トピックから少し外れますが (OP が Winston について尋ねているため)、Bunyan による「子ロガー」アプローチが気に入っています。

var bunyan = require('bunyan');
var log = bunyan.createLogger({name: 'myapp'});

app.use(function(req, res, next) {
  req.log = log.child({reqId: uuid()});
  next();
});

app.get('/', function(req, res) {
  req.log.info({user: ...});
});

ロガーはreqオブジェクトを介して利用できるため、OPの問題を解決します(したがって、各モジュールで「require(log)」は必要ありません)。さらに、特定のリクエストに属するすべてのログ エントリには、それらを結び付ける一意の ID があります。

{"name":"myapp","hostname":"pwony-2","pid":14837,"level":30,"reqId":"XXXX-XX-XXXX","user":"...@gmail.com","time":"2014-05-26T18:27:43.530Z","v":0}

Winston もこれをサポートしているかどうかはわかりません。

于 2015-06-02T02:48:52.380 に答える