yodelay
Version:
Log and send error metrics off with ease.
99 lines (83 loc) • 2.26 kB
JavaScript
import winston from "winston";
import moment from "moment";
class FormatLogger {
constructor(params) {
this.logger = params.logger;
this.logger.logMessageFormat = this.logMessageFormat.bind(this);
this.format = params.format;
this.appName = params.appName;
this.debugContext = params.debugContext;
}
filterContext() {
return winston.format((info) => {
if (this.debugContext !== null && info.context !== this.debugContext) {
return false;
}
return info;
})();
}
simpleBaseFormat() {
const base = winston.format.printf(info => {
const string = `${moment(info.timestamp)} [${info.app}] ${
info.context ? `[context: ${info.context}]}` : ""
} ${info.level}: ${info.message}`;
if (info.data) {
return `${string} ${JSON.stringify(info.data)}`;
}
return string;
});
return winston.format.combine(winston.format.timestamp(), base);
}
logMessageFormat(message, data, context) {
let logMessage = {
app: this.appName,
message: message
};
if (data) {
logMessage.data = data;
}
if (context) {
logMessage.context = context;
}
return logMessage;
}
setFormat() {
switch (this.format) {
case "json":
this.logger.add(
new winston.transports.Console({
format: winston.format.combine(
this.filterContext(),
winston.format.timestamp(),
winston.format.json()
)
})
);
break;
case "simple":
this.logger.add(
new winston.transports.Console({
format: winston.format.combine(
this.filterContext(),
winston.format.colorize(),
winston.format.simple(),
this.simpleBaseFormat()
)
})
);
break;
default:
this.logger.add(
new winston.transports.Console({
format: winston.format.combine(
this.filterContext(),
winston.format.colorize(),
winston.format.simple(),
simpleBase
)
})
);
}
}
}
export default FormatLogger;