thunder-log
Version:
The logger used for Shared Services Logging.
112 lines (104 loc) • 2.62 kB
JavaScript
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()