2015-05-04 6 views
6

Я смотрел bunyan для входа в мое приложение nodejs. Я попробовал, и все, кажется, работает очень хорошо. Я пропустил a section на log.child, но теперь я пытаюсь понять, как его использовать. Я думаю, что это цель - позволить мне указать какой-то специальный идентификатор для записи в журнале, чтобы я мог однозначно идентифицировать, как этот журнал связан с какой-либо другой записью журнала.bunyan 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}); 
    }); 
}); 

Таким образом, если пользователь Bob сообщений для /submit дважды в промежуток 30 сек, будет некоторый контекст что дифференцирует между двумя различными вызовами в файле журнала.

То есть, я вижу что-то вроде этого (с контекстом):

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 app, я бы создал объект logChild, а затем использовал logChild для регистрации записей на этом маршруте.

Могу ли я понимание и реализации использование Случай log.child правильно?

ответ

3

Возможно, вы используете log.child соответствующим образом. Одно из предложений, которое я мог бы сделать, чтобы помочь вам «уникально идентифицировать, как этот журнал связан с какой-либо другой записью журнала», - это присоединение log к объекту req. Таким образом, если у вас есть другое промежуточное программное обеспечение, вы можете получить доступ к тому же журналу с тем же уникальным идентификатором из нескольких мест. Например:

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' } в журналах, что дает вам возможность связать любое промежуточное программное обеспечение в цепочке запросов к одному пользователю с помощью req.log объекта.