40 votes

Comment puis-je transmettre la sortie du journal de Connect / Express à Winston?

Je suis en train de faire un Node.js app et je suis à l'aide de Winston pour la plupart de mes enregistrement. J'ai aussi conscience de la Connexion/l'Express de la fonction enregistreur et de savoir qu'il a un flot d'option... Est-il possible à la sortie de la substance à partir de Connecter/Exprimer la fonction d'enregistreur de Winston? ...alors que je peux avoir toute la durée de la journalisation j'ai besoin?

Je trouve l'enregistrement qui se Connecter/Express utile, mais au moment où les deux sont en quelque sorte séparé... je doit préfèrent que tout s'exécute par le biais de Winston et il de transports.

Comment est-ce possible? Merci, Jacques

69voto

sethpollack Points 768

Voici ce que j'ai fait pour résoudre ce problème. Utilisez essentiellement l'option de flux du module connect / express logger pour acheminer les messages vers winston. J'ai choisi d'utiliser le niveau de journalisation de winston.info, quel que soit le niveau qui vous convient.

 var winston = require('winston');
var express = require('express');

var app = express.createServer();

// enable web server logging; pipe those log messages through winston
var winstonStream = {
    write: function(message, encoding){
        winston.info(message);
    }
};
app.use(express.logger({stream:winstonStream}));

// now do the rest of your express configuration...
 

3voto

tuxpiper Points 451

J'ai eu le même problème, j'ai regardé dans les éléments internes du module de journalisation et à peu près répliqué ce qui est là, dans ce middleware personnalisé (warning, coffeescript).

En prime, il enregistre les données en utilisant également des champs de métadonnées.

 (req, res, next) ->
  sock = req.socket
  req._startTime = new Date
  req._remoteAddress = sock.socket && sock.socket.remoteAddress || sock.remoteAddress;

  _url = () -> req.originalUrl || req.url
  _method = () -> req.method
  _respTime = () -> String(Date.now() - req._startTime)
  _status = () -> res.headerSent && res.statusCode || null
  _remoteAddr = () -> req.ip || req._remoteAddress || (req.socket?.socket? && req.socket.socket.remoteAddress) || req.socket.remoteAddress
  _usrAgent = () -> req.headers['user-agent']

  logRequest = () ->
    res.removeListener 'finish', logRequest
    res.removeListener 'close', logRequest
    winston.info "#{_method()} #{_url()} #{_status()} #{_remoteAddr()} #{_usrAgent()} #{_respTime()}",
      http_access:
        method: _method()
        url: _url()
        status: _status()
        remote_address: _remoteAddr()
        user_agent: _usrAgent()
  res.on 'finish', logRequest
  res.on 'close', logRequest

  next()
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X