http.ServerResponse のフックでログを吐かせる

res.end(...) 書く度に log.write(...) したくない。
というか、自動的にやってほしい。

var path   = require('path')
,   fs     = require('fs')
,   http   = require('http')
,   moment = require('moment')
;

function createSimpleLog (ws, display) {
    ws = ((ws || {}).writable) ? ws : process.stdout;
    return function (req, res) {
        var end = res.end;
        res.end = function () {
            //this.constructor.prototype.end.apply(this, arguments);
            end.apply(this, arguments);

            var now = moment().format("MM/DD/YYYY HH:mm:ss +0900");
            var logMessage = [
                now
              , req.method.toUpperCase()
              , req.url
              , res.statusCode
            ].join(' ');

            ws.write(logMessage + "\n");
            if (display) console.log(logMessage);
        };
    };
}

var log = createSimpleLog(
            fs.createWriteStream(path.join(__dirname, 'access.log'))
          , true);

http.createServer(function (req, res) {
    log(req, res);

    res.writeHead(200);
    res.end(req.url);
}).listen(3000);