11

私はbunyan自分のnodejsアプリにログインするために探していました。私はそれを試してみましたが、すべてがかなりうまくいくようです。のセクションを飛ばしてしまいましlog.childたが、今は使い方を理解しようとしています。その目的は、ログエントリに特別な識別子を指定できるようにすることだと思います。これにより、そのログが他のログエントリにどのように関連付けられているかを一意に識別できます。

log.childその場合は、すべてのリクエストで次を使用することを想像します。

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

router.post('/submit', function(req, res) {
    var logChild = log.child({reqId: uuid.v4()});
    logChild.info({ req:req }, req.user.name + ' has called /submit');

    saveData(req)
    .then(function(data) {
        logChild.info({data: data}, req.user.name + ' has saved to DB successfully in /submit');
        res.json({'success': 'Saved!'});
    })
    .error(function(err) {
        logChild.error({ err: err }, req.user.name + ' has caused an error in /submit ');
        res.status(500).json("error": err});
    }); 
});

そうすれば、ユーザーが 30 秒間に 2 回BobPOST を実行した場合/submit、ログ ファイル内の 2 つの異なる呼び出しを区別する何らかのコンテキストが得られます。

つまり、次のようなものが表示されます (コンテキスト付き):

Bob has called /submit uuid: 109156be-c4fb-41ea-b1b4-efe1671c5836
Bob has called /submit uuid: 49dlsd7i-dapd-fdio-fei0-sd59fd0ph34d
Bob has saved to DB successfully in /submit uuid: 109156be-c4fb-41ea-b1b4-efe1671c5836
Bob has caused an error in /submit uuid: 49dlsd7i-dapd-fdio-fei0-sd59fd0ph34d

これの代わりに (コンテキストなし):

Bob has called /submit
Bob has called /submit
Bob has saved to DB successfully in /submit
Bob has caused an error in /submit

そのため、Nodejs アプリのすべてのルートについて、logChildオブジェクトを作成し、 を使用しlogChildてそのルートのエントリをログに記録します。

のユースケースを正しく理解実装していますか?log.child

4

1 に答える 1

14

log.child を適切に使用しているようです。「そのログが他のログエントリにどのように関連付けられているかを一意に識別する」のに役立つ1つの提案は、オブジェクトにアタッチlogすることです。reqこのように、異なるミドルウェアを使用している場合、複数の場所から同じ一意の ID を持つ同じロガーにアクセスできます。例えば:

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

router.use(function(req, res, next) {
    req.log = log.child({ user : req.user.id });
});

router.post('/submit', function(req, res) {
    req.log.info('submitted request at ' + Date.now());
});

オブジェクト{ user : some_user_id, msg: 'submitted request at 01/03/15' }を使用して、リクエスト チェーン内の任意のミドルウェアを 1 人のユーザーに関連付けることができるログが表示されるようになりました。req.log

于 2015-05-18T08:31:57.147 に答える