Skip to content

Instantly share code, notes, and snippets.

@cwg999
Created May 10, 2018 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cwg999/21768120ded6195296722cc00c7fd562 to your computer and use it in GitHub Desktop.
Save cwg999/21768120ded6195296722cc00c7fd562 to your computer and use it in GitHub Desktop.
winst-logger.js
const path = require('path');
const util = require('util');
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const myFormat = printf(info => {
info.label = info.label.padStart(5,' ');
info.level.padStart(7,' ');
let re = /[\r\n]+/;
if(typeof info.message === "object")
info.message = util.inspect(info.message);
let splitMessages = typeof info.message==="string"
?info.message.split(re)
:[""];
if(splitMessages.length>1){
let reducer = (a,msg)=> a+(a.length>0?`\r\n`:'')+`${info.timestamp} [${info.label}] ${info.level}: ${msg}`;
return splitMessages.reduce(reducer,'');
}else{
return `${info.timestamp} [${info.label.padStart(5,' ')}] ${info.level.padStart(5,' ')}: ${info.message}`;
}
});
const winstLogger = function(loggerLabel){
let logger = createLogger({
format: combine(
label({ label: loggerLabel }),
timestamp(),
myFormat
),
transports: [
new transports.File({
filename: path.join(__dirname,'logs/',`${loggerLabel}.error.log`),
json:false,
maxsize:'10485760',
maxFiles:'10',
level:'error'
}),
new transports.File({
filename: path.join(__dirname,'logs/',`${loggerLabel}.log`),
json:false,
maxsize:'10485760',
maxFiles:'10',
level:'silly'
})
]
});
if (['production','testing'].indexOf(process.env.NODE_ENV)===-1) {
logger.add(new transports.Console({
format: combine(
format.colorize(),
label({ label: loggerLabel }),
timestamp(),
myFormat
),
level:'debug',
prettyPrint:true
}));
}
return logger;
};
exports.winstLogger=winstLogger;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment