taboo-cms
Version:
80 lines (71 loc) • 2.19 kB
JavaScript
const bunyan = require('bunyan');
const bformat = require('bunyan-format');
const shortFormat = bformat({ outputMode: 'short' }, process.stdout);
class Logger {
constructor() {
this.config = null;
this.logger = {};
}
setup(config) {
this.config = config;
if (this.config.logger) {
if (this.config.debug) {
this.config.logger.streams.map(stream => {
if (stream.stream && stream.stream === process.stdout) {
stream.level = 'debug';
stream.stream = shortFormat;
}
});
}
this.logger = bunyan.createLogger(this.config.logger);
} else {
this.logger = {
log: console.log, // eslint-disable-line no-console
info: console.info, // eslint-disable-line no-console
warn: console.warn, // eslint-disable-line no-console
error: console.error, // eslint-disable-line no-console
debug: console.debug, // eslint-disable-line no-console
};
}
}
log(...args) {
if (args.length < 2) {
args.unshift('info');
}
if (typeof this.logger.log === 'function') {
this.logger.log(...args);
} else {
console.error('Logger method not found: log'); // eslint-disable-line no-console
}
}
info(...args) {
if (typeof this.logger.info === 'function') {
this.logger.info(...args);
} else {
console.error('Logger method not found: info'); // eslint-disable-line no-console
}
}
warn(...args) {
if (typeof this.logger.warn === 'function') {
this.logger.warn(...args);
} else {
console.error('Logger method not found: warn'); // eslint-disable-line no-console
}
}
error(...args) {
if (typeof this.logger.error === 'function') {
this.logger.error(...args);
} else {
console.error('Logger method not found: error'); // eslint-disable-line no-console
}
}
debug(...args) {
if (typeof this.logger.debug === 'function') {
this.logger.debug(...args);
} else {
console.error('Logger method not found: debug'); // eslint-disable-line no-console
}
}
}
// We will need only single instance
module.exports = new Logger();