Skip to content

Instantly share code, notes, and snippets.

@spmason
Created January 24, 2012 13:35
Embed
What would you like to do?
A simple node module that makes console.log/error/warn/debug statements log through winston (simply include at the beginning of your app)
'use strict';
var util = require('util'),
winston = require('winston'),
logger = new winston.Logger(),
production = (process.env.NODE_ENV || '').toLowerCase() === 'production';
module.exports = {
middleware: function(req, res, next){
console.info(req.method, req.url, res.statusCode);
next();
},
production: production
};
// Override the built-in console methods with winston hooks
switch((process.env.NODE_ENV || '').toLowerCase()){
case 'production':
production = true;
logger.add(winston.transports.File, {
filename: __dirname + '/application.log',
handleExceptions: true,
exitOnError: false,
level: 'warn'
});
break;
case 'test':
// Don't set up the logger overrides
return;
default:
logger.add(winston.transports.Console, {
colorize: true,
timestamp: true,
level: 'info'
});
break;
}
function formatArgs(args){
return [util.format.apply(util.format, Array.prototype.slice.call(args))];
}
console.log = function(){
logger.info.apply(logger, formatArgs(arguments));
};
console.info = function(){
logger.info.apply(logger, formatArgs(arguments));
};
console.warn = function(){
logger.warn.apply(logger, formatArgs(arguments));
};
console.error = function(){
logger.error.apply(logger, formatArgs(arguments));
};
console.debug = function(){
logger.debug.apply(logger, formatArgs(arguments));
};
@elyobo
Copy link

elyobo commented Sep 26, 2017

@fega surely it could be more simple, the .call seems redundant.

  console.log = (...args) => logger.info(...args);
  // etc

@rob2d
Copy link

rob2d commented Jan 8, 2018

@spmason thanks for the great simple reference here!

@fega much easier to read, but important to note that it's not semantically equivalent to normal syntax; binds this to current scope which could or might cause people unfamiliar to get confused or have debugging problems somewhere (if they want to override with any other logic as well). Not to say it's bad, just pointing out in case somebody is bashing their head on the keyboard somewhere one day :)

@sbolel
Copy link

sbolel commented Jan 23, 2018

Thanks for the info everyone.

@spmason and @fega -- I've quoted your answers in this stackoverflow answer, and marked it as a community wiki since I did not write the answers myself. Cheers.

@carlosatta
Copy link

tnks

@Himanshu922
Copy link

Can i override logger level default methods, actually i want to save all logger.error msgs in mongo

@BinaryShrub
Copy link

Took a stab at an updated version with color support: https://gist.github.com/BinaryShrub/790d97e34247d409f85b7c9434d0ddd5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment