diff --git a/src/logger.js b/src/logger.js index 1a106e1efc..90926dd5fd 100644 --- a/src/logger.js +++ b/src/logger.js @@ -1,3 +1,5 @@ +'use strict'; + /* * Logger module: ability to dynamically turn on/off logging for http requests & socket.io events */ @@ -34,25 +36,22 @@ var opts = { opts.express.app = app; /* Open log file stream & initialize express logging if meta.config.logger* variables are set */ Logger.setup(); - } + }; Logger.setup = function() { Logger.setup_one('loggerPath', meta.config.loggerPath); - } + }; - Logger.setup_one = function(key,value) { + Logger.setup_one = function(key, value) { /* * 1. Open the logger stream: stdout or file * 2. Re-initialize the express logger hijack */ - switch(key) { - case 'loggerPath': { - Logger.setup_one_log(value); - Logger.express_open(); - } - default: return; + if (key === 'loggerPath') { + Logger.setup_one_log(value); + Logger.express_open(); } - } + }; Logger.setup_one_log = function(value) { /* @@ -61,20 +60,23 @@ var opts = { */ if(meta.config.loggerStatus > 0 || meta.config.loggerIOStatus) { var stream = Logger.open(value); - if(stream) opts.streams.log.f = stream; - else opts.streams.log.f = process.stdout; + if(stream) { + opts.streams.log.f = stream; + } else { + opts.streams.log.f = process.stdout; + } } else { Logger.close(opts.streams.log); } - } + }; Logger.open = function(value) { /* Open the streams to log to: either a path or stdout */ var stream; if(value) { if(fs.existsSync(value)) { - stats = fs.statSync(value); + var stats = fs.statSync(value); if(stats) { if(stats.isDirectory()) { stream = fs.createWriteStream(path.join(value, 'nodebb.log'), {flags: 'a'}); @@ -96,12 +98,14 @@ var opts = { stream = process.stdout; } return stream; - } + }; Logger.close = function(stream) { - if(stream.f != process.stdout && stream.f != null) stream.end(); + if(stream.f !== process.stdout && stream.f) { + stream.end(); + } stream.f = null; - } + }; Logger.monitorConfig = function(socket, data) { /* @@ -110,10 +114,10 @@ var opts = { Logger.setup_one(data.key,data.value); Logger.io_close(socket); Logger.io(socket); - } + }; Logger.express_open = function() { - if(opts.express.set != 1) { + if(opts.express.set !== 1) { opts.express.set = 1; opts.express.app.use(Logger.expressLogger); } @@ -121,7 +125,7 @@ var opts = { * Always initialize "ofn" (original function) with the original logger function */ opts.express.ofn = express.logger({stream : opts.streams.log.f}); - } + }; Logger.expressLogger = function(req,res,next) { /* @@ -134,7 +138,7 @@ var opts = { } else { return next(); } - } + }; Logger.prepare_io_string = function(_type, _uid, _args) { /* @@ -145,82 +149,74 @@ var opts = { try { return 'io: '+_uid+' '+_type+' '+util.inspect(Array.prototype.slice.call(_args))+'\n'; } catch(err) { - winston.info("Logger.prepare_io_string: Failed",err) + winston.info("Logger.prepare_io_string: Failed", err); return "error"; } - } + }; Logger.io_close = function(socket) { /* * Restore all hijacked sockets to their original emit/on functions */ var clients = socket.io.sockets.clients(); - for(var v in clients) { - var client = clients[v]; - - if(client.oEmit != undefined && client.oEmit != client.emit) { + clients.forEach(function(client) { + if(client.oEmit && client.oEmit !== client.emit) { client.emit = client.oEmit; } - if(client.$oEmit != undefined && client.$oEmit != client.$emit) { + if(client.$oEmit && client.$oEmit !== client.$emit) { client.$emit = client.$oEmit; } - } - } + }); + }; Logger.io = function(socket) { /* * Go through all of the currently established sockets & hook their .emit/.on */ - if(socket == undefined && socket.io.sockets == undefined) { + if(!socket && !socket.io.sockets) { return; } var clients = socket.io.sockets.clients(); - for(var v in clients) { - var client = clients[v]; - Logger.io_one(client,client.state.user.uid); - } - } - Logger.io_one = function(socket,uid) { + clients.forEach(function(client) { + Logger.io_one(client, client.uid); + }); + }; + + Logger.io_one = function(socket, uid) { /* * This function replaces a socket's .emit/.on functions in order to intercept events */ - if(socket != undefined && meta.config.loggerIOStatus > 0) { + if(socket && meta.config.loggerIOStatus > 0) { (function() { + function override(method, name, errorMsg) { + return function() { + if(opts.streams.log.f) { + opts.streams.log.f.write(Logger.prepare_io_string(name, uid, arguments)); + } + + try { + method.apply(socket, arguments); + } catch(err) { + winston.info(errorMsg, err); + } + }; + } + // courtesy of: http://stackoverflow.com/a/9674248 - var user = uid - if(!user) user = "?" socket.oEmit = socket.emit; var emit = socket.emit; - socket.emit = function() { - if(opts.streams.log.f != null) { - opts.streams.log.f.write(Logger.prepare_io_string("emit", uid, arguments)); - } + socket.emit = override(emit, 'emit', 'Logger.io_one: emit.apply: Failed'); - try { - emit.apply(socket, arguments); - } catch(err) { - winston.info("Logger.io_one: emit.apply: Failed", err); - } - }; socket.$oEmit = socket.$emit; var $emit = socket.$emit; - socket.$emit = function() { + socket.$emit = override($emit, 'on', 'Logger.io_one: $emit.apply: Failed'); - if(opts.streams.log.f != null) { - opts.streams.log.f.write(Logger.prepare_io_string("on",uid,arguments)); - } - try { - $emit.apply(socket, arguments); - } catch(err) { - winston.info("Logger.io_one: $emit.apply: Failed", err); - } - }; })(); } - } + }; }(exports));