UNPKG

thunder-log

Version:

The logger used for Shared Services Logging.

112 lines (104 loc) 2.62 kB
const { awsLogger, devLogger } = require("./logger"); // logger class used to define functions of the logging objects class Logger { write(severity, options) { if (typeof options == typeof 'string') options = { Summary: options } if (validStatement(severity, options)) { this.logger.log(severity, options); } else { throw new Error('Invalid Logging Statement') } } info(options) { this.write('info',options); } debug(options) { this.write('debug',options); } warn(options) { this.write('warn',options); } error(options) { this.write('error',options) } } // calls and sets the production logger class AWSLogger extends Logger { constructor() { super(); this.logger = awsLogger(); } } // calls and sets the development logger class DevLogger extends Logger { constructor() { super(); this.logger = devLogger(); } } // overrides the logger for testing class MockLogger extends Logger { constructor() { super(); } write(severity, options) { if (typeof options == typeof 'string') options = { Summary: options } if (validStatement(severity, options)) { if (severity == 'info') { return 1; } else if (severity == 'debug') { return 2; } else if (severity == 'warn') { return 3; } else if (severity == 'error') { return 4 } return -1; } else { return new Error('Invalid Logging Statement') } } info(options) { return this.write('info',options); } debug(options) { return this.write('debug',options); } warn(options) { return this.write('warn',options); } error(options) { return this.write('error',options) } } const severities = [ "debug", "info", "warn", "error" ]; // verifies the validity of the logging statement const validStatement = (severity, options) => { if (typeof severity != typeof 'string') return false if (severities.indexOf(severity) == -1) return false if (severity == 'error' && !options.ExceptionDetails) return false if (!options.Summary) return false return true } // logging factory, returns a logger based on the name passed class Logging { constructor() {} getLogger (loggerName) { if (!loggerName) { loggerName = (process.env.NODE_ENV) ? 'development' : 'production'; } if (loggerName === 'development') { return new DevLogger(); } else if (loggerName === 'production') { return new AWSLogger(); } else if (loggerName === 'test') { return new MockLogger(); } } } module.exports = new Logging()