Path: blob/master/lib/rammerhead/src/classes/RammerheadLogging.js
5253 views
/**1* @typedef {'disabled'|'debug'|'traffic'|'info'|'warn'|'error'} LoggingLevels2*/34const LOG_LEVELS = ['disabled', 'debug', 'traffic', 'info', 'warn', 'error'];56function defaultGeneratePrefix(level) {7return `[${new Date().toISOString()}] [${level.toUpperCase()}] `;8}910class RammerheadLogging {11/**12* @param {object} options13* @param {LoggingLevels} options.logLevel - logLevel to initialize the logger with14* @param {(data: string) => void} options.logger - expects the logger to automatically add a newline, just like what console.log does15* @param {*} options.loggerThis - logger will be called with loggerThis binded16* @param {(level: LoggingLevels) => string} options.generatePrefix - generates a prefix before every log. set to null to disable17*/18constructor({19logLevel = 'info',20logger = console.log,21loggerThis = console,22generatePrefix = defaultGeneratePrefix23} = {}) {24this.logger = logger;25this.loggerThis = loggerThis;26this.generatePrefix = generatePrefix;2728/**29* @private30*/31this._logRank = this._getLogRank(logLevel);32}3334get logLevel() {35return LOG_LEVELS[this._logRank];36}37/**38* logger() will be called based on this log level39* @param {LoggingLevels} level40*/41set logLevel(level) {42this._logRank = this._getLogRank(level);43}44callLogger(data) {45this.logger.call(this.loggerThis, data);46}47/**48* @param {LoggingLevels} level49* @param {string} data50*/51log(level, data) {52const rank = this._getLogRank(level);53// the higher the log level, the more important it is.54// ensure it's not disabled55if (rank && this._logRank <= rank) {56this.callLogger((this.generatePrefix ? this.generatePrefix(level) : '') + data);57}58}59debug = (data) => this.log('debug', data);60traffic = (data) => this.log('traffic', data);61info = (data) => this.log('info', data);62warn = (data) => this.log('warn', data);63error = (data) => this.log('error', data);6465/**66* @private67* @param {LoggingLevels} level68* @returns {number}69*/70_getLogRank(level) {71const index = LOG_LEVELS.indexOf(level);72if (index === -1) {73throw new TypeError(`Invalid log level '${level}'. Valid log levels: ${LOG_LEVELS.join(', ')}`);74}75return index;76}77}7879module.exports = RammerheadLogging;808182