title: What's the best practice for expressjs logging?
body: <p>I am building an application based on expressjs and I'd like to log all events in it. I could find winston, which seems to be cool. Anyway, I am looking for a way how to connect it to my expressjs app.</p>
  
  <p>What I also want is logging inside the application. My reqeusts are not so simple, so I'd like to log everything inside my app (not only requests).</p>
  
  <p>My current situation:</p>
  
  <p><strong>server.js</strong> (I'd like to log http requests on this level)</p>
  
  <pre><code>var express = require('express');
  var app = express();
  var fs = require('fs');
  
  // Post parser
  app.configure(function(){
      app.use(express.bodyParser());
  });
  
  // Load routes
  require('fs').readdirSync(__dirname + '/routes').forEach(function(file) {
      require(__dirname + '/routes/' + file)(app);
  });
  
  // 404: Not found
  app.use(function(req, res, next){
      res.json(404, {ERROR: 'Page not found.'});
  });
  
  // 500: Error reporing
  app.use(function(err, req, res, next){
      console.error(err.stack);
      res.json(500, {ERROR: 'Internal server error.'} );
  });
  
  // Startup new server
  app.listen(900);
  </code></pre>
  
  <p><strong>routes/something.js</strong></p>
  
  <pre><code>var something = require(__dirname + '/../controller/something.js');
  
  module.exports = function(app) {
      app.get('/v1/something', function(req, res, next) { new something().getAll(req, res, next); });
  };
  </code></pre>
  
  <p><strong>controller/something.js</strong> (I'd like to use the same logger for debug logging)</p>
  
  <pre><code>/**
   * Constructor
   *
   */
  function Something() {
  };
  
  /**
   * Get all the data
   *
   */
  Something.prototype.getAll = function(req, res, next) {
      // I want to log some very important information here
      res.json({result: true, data: ['hello', 'hi', 'ciao', 'buf']});
  }
  
  module.exports = Something;
  </code></pre>
  
  <p>The other thing I am thinking about is logging all the events in functions that are called from controllers (e.g. models or other libraries).</p>
  
  <p>So I think, the good way might to create some logger library, that will be called using:</p>
  
  <pre><code>var logger = require(__dirname + '/../libraries/logger.js');
  </code></pre>
  
  <p>containing logger definition. The other issue I don't know how to solve is how to prefix data. You know, I have a lot of concurrent requests and I'd like to see which debug message was called by each request.</p>