2015-02-17 2 views
1

У меня есть API, построенный с помощью функции express.Как регистрировать HTTP-запрос/ответную информацию после отправки ответа HTTP?

Из коробки он использует morgan, который может использоваться в качестве промежуточного программного обеспечения для ведения журнала. Из того, что я вижу, он связывается с запросом и прислушивается к событиям и может собирать данные, когда соединение завершено. Это позволяет записывать тайминги и размер передаваемых данных.

Я бы предпочел использовать что-то вроде winston, у которого есть действительно хорошие варианты транспорта, которые мне подходят, хотя я ищу, чтобы захватить больше данных о вводе-выводе с моим сервером.

У меня есть собственные настраиваемые функции ответа, которые я могу записать дополнительную информацию при ответе на мои конечные точки API.

Я не могу сделать то же самое для запросов на ведение статических активов.

Таким образом, мне очень нужно иметь функцию, которая связывается с запросом и протоколами при завершении, поэтому я могу отслеживать время отклика, размер ответа и другие данные через все запросов.

Как я могу достичь этого при использовании winston?

+0

Показать ваш код пожалуйста. – NarendraSoni

ответ

0

я решить этот давным давно ...

Законченное с помощью этого пакета, чтобы помочь определить, когда были написаны заголовки ответа (что указывает на конец реакции) - https://github.com/jshttp/on-headers

Это код, который я реализовал в качестве промежуточного программного обеспечения, для достижения регистрации в конце каждого ответа:

// Log Request 
app.use(function (req, res, next) { 
    // Listen for response event and log 
    onHeaders(res, function() { 
    logger.info({ 
     _id: req.id, 
     client: { 
      ip: function() { 
       return req.ip 
        || req._remoteAddress 
        || (req.connection && req.connection.remoteAddress) 
        || undefined 
      }() 
     }, 
     method: req.method, 
     url: req.url, 
     statusCode: res.statusCode, 
     time: (Date.now() - req.start), 
     'res-length': res._headers['content-length'] || 0, 
     'req-length': req.headers['content-length'] || 0 
    }); 
    }); 

    next(); 
}); 
Смежные вопросы