Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Logger Library with winston
var app = require(process.cwd() + '/app');
var winston = require('winston');
var _ = require('lodash');
// Set up logger
var customColors = {
trace: 'white',
debug: 'green',
info: 'green',
warn: 'yellow',
crit: 'red',
fatal: 'red'
};
var logger = new(winston.Logger)({
colors: customColors,
levels: {
trace: 0,
debug: 1,
info: 2,
warn: 3,
crit: 4,
fatal: 5
},
transports: [
new(winston.transports.Console)({
level: app.settings.logLevel,
colorize: true,
timestamp: true
})
// new (winston.transports.File)({ filename: 'somefile.log' })
]
});
winston.addColors(customColors);
// Extend logger object to properly log 'Error' types
var origLog = logger.log;
logger.log = function (level, msg) {
var objType = Object.prototype.toString.call(msg);
if (objType === '[object Error]') {
origLog.call(logger, level, msg.toString());
} else {
origLog.call(logger, level, msg);
}
};
/* LOGGER EXAMPLES
app.logger.trace('testing');
app.logger.debug('testing');
app.logger.info('testing');
app.logger.warn('testing');
app.logger.crit('testing');
app.logger.fatal('testing');
*/
module.exports = logger;
@bryanlarsen

This comment has been minimized.

Show comment
Hide comment
@bryanlarsen

bryanlarsen Feb 19, 2014

origLog.call(logger, level, msg); will lose additional arguments to the log function. origLog.apply(logger, arguments) works better. I also suggest using msg.stack instead of msg.toString(), but that's a preference.

origLog.call(logger, level, msg); will lose additional arguments to the log function. origLog.apply(logger, arguments) works better. I also suggest using msg.stack instead of msg.toString(), but that's a preference.

@prantlf

This comment has been minimized.

Show comment
Hide comment
@prantlf

prantlf Dec 23, 2014

Excellent idea. Fixed at my gist fork.

prantlf commented Dec 23, 2014

Excellent idea. Fixed at my gist fork.

@coryellenberger

This comment has been minimized.

Show comment
Hide comment
@coryellenberger

coryellenberger Jul 24, 2015

I see you bring in lodash but never use it; I'm assuming it was brought in for some other reason then forgot?

I see you bring in lodash but never use it; I'm assuming it was brought in for some other reason then forgot?

@dantheman213

This comment has been minimized.

Show comment
Hide comment
@dantheman213

dantheman213 Oct 28, 2015

How does this wrap around the expressjs application? what file are you calling this from and how do you redirect the standard output to this library?

How does this wrap around the expressjs application? what file are you calling this from and how do you redirect the standard output to this library?

@khalilovcmd

This comment has been minimized.

Show comment
Hide comment
@khalilovcmd

khalilovcmd Jan 8, 2016

If you would like to add a file transport to a sub-directory, you could do the following:

var fs = require('fs');

// check if directory exist
if (!fs.existsSync('logs')) {
    fs.mkdirSync('logs'); // create new directory
}

And also you don't need require('lodash')

I forked and updated it.

If you would like to add a file transport to a sub-directory, you could do the following:

var fs = require('fs');

// check if directory exist
if (!fs.existsSync('logs')) {
    fs.mkdirSync('logs'); // create new directory
}

And also you don't need require('lodash')

I forked and updated it.

@chaituckr

This comment has been minimized.

Show comment
Hide comment
@chaituckr

chaituckr May 10, 2016

for me it is throwing an error saying "cannot find 'logLevel' of undefined" i.e., "app.settings" is undefined.

for me it is throwing an error saying "cannot find 'logLevel' of undefined" i.e., "app.settings" is undefined.

@joshelson

This comment has been minimized.

Show comment
Hide comment
@joshelson

joshelson May 24, 2016

If this is not displaying all log levels as expected, note that Winston 2.x reversed the order of the log levels.

Fixed gist here.

If this is not displaying all log levels as expected, note that Winston 2.x reversed the order of the log levels.

Fixed gist here.

@vikas5914

This comment has been minimized.

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