diff --git a/lib/middleware.js b/lib/middleware.js index 1fde5e16a..3c57a7e80 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -100,13 +100,12 @@ module.exports.log_and_etagify = function(req, res, next) { var _send = res.send; res.send = function(body) { - var error; if (typeof(body) === 'string' || typeof(body) === 'object') { res.header('Content-type', 'application/json'); if (typeof(body) === 'object' && body != null) { if (body.error) { - error = body.error; + res._sinopia_error = body.error; } body = JSON.stringify(body, undefined, '\t'); } @@ -116,8 +115,24 @@ module.exports.log_and_etagify = function(req, res, next) { // send(null), send(204), etc. } + res.send = _send; + res.send(body); + } + + var bytesout = 0 + var _write = res.write + res.write = function(buf) { + bytesout += buf.length + _write.apply(res, arguments) + } + + var _end = res.end; + res.end = function(buf) { + if (buf) bytesout += buf.length + _end.apply(res, arguments) + var msg = '@{status}, user: @{user}, req: \'@{request.method} @{request.url}\''; - if (error) { + if (res._sinopia_error) { msg += ', error: @{!error}'; } else { msg += ', bytes: @{bytes.in}/@{bytes.out}'; @@ -127,15 +142,12 @@ module.exports.log_and_etagify = function(req, res, next) { level: 35, // http user: req.user, status: res.statusCode, - error: error, + error: res._sinopia_error, bytes: { in: bytesin, - out: body.length, + out: bytesout, } }, msg); - - res.send = _send; - res.send(body); }; next(); }