@appsensorlike/appsensorlike
Version:
A port of OWASP AppSensor reference implementation
112 lines (111 loc) • 3.78 kB
JavaScript
import log from "log4js";
import { JSONConfigManager, JSONConfigReadValidate } from '../utils/Utils.js';
class LoggingConfiguration {
constructor() {
this.log4jsLoggers = {
appenders: {
"out": {
"type": "stdout"
}
},
categories: {
"default": {
"appenders": ["out"],
"level": "trace"
}
}
};
}
}
class Logger {
static async initLoggers(forceReconfig = false) {
if (forceReconfig) {
await Logger.shutdownAsync();
}
if (forceReconfig || !Logger.log4js) {
Logger.log4js = log.configure(Logger.configManager.getConfiguration().log4jsLoggers);
if (Logger.log4js) {
Logger.clientLogger = Logger.log4js.getLogger(Logger.APPSENSOR_CLIENT_CATEGORY);
Logger.serverLogger = Logger.log4js.getLogger(Logger.APPSENSOR_SERVER_CATEGORY);
Logger.responsesLogger = Logger.log4js.getLogger(Logger.APPSENSOR_RESPONSES_CATEGORY);
Logger.testsLogger = Logger.log4js.getLogger(Logger.APPSENSOR_TESTS);
}
}
}
static async init() {
Logger.configManager.listenForConfigurationChange((newConfig) => {
Logger.initLoggers(true);
});
await Logger.initLoggers(true);
}
static getClientLogger() {
return Logger.clientLogger;
}
static getServerLogger() {
return Logger.serverLogger;
}
static getResponsesLogger() {
return Logger.responsesLogger;
}
static getTestsLogger() {
return Logger.testsLogger;
}
static getLogger(category) {
return Logger.log4js.getLogger(category);
}
static getRecording() {
return log.recording();
}
static getRecordingErrorEvents() {
return log.recording().replay().filter(el => {
return el.level.isEqualTo(log.levels.ERROR);
});
}
static stringifyObjInLog(logger, level, obj) {
if (logger) {
let arg = obj;
try {
arg = JSON.stringify(obj, null, 2);
}
catch (error) {
}
logger.log(level, arg);
}
}
static async shutdownAsync() {
await new Promise((resolve, reject) => {
if (Logger.log4js) {
Logger.log4js.shutdown((error) => {
if (error) {
reject(error);
return;
}
resolve(0);
});
}
else {
resolve(0);
}
});
}
static shutdown(cb) {
if (Logger.log4js) {
Logger.log4js.shutdown(cb);
}
}
}
Logger.APPSENSOR_CLIENT_CATEGORY = "APPSENSOR_CLIENT";
Logger.APPSENSOR_SERVER_CATEGORY = "APPSENSOR_SERVER";
Logger.APPSENSOR_RESPONSES_CATEGORY = "APPSENSOR_RESPONSES";
Logger.APPSENSOR_TESTS = "TESTS";
Logger.configFile = 'appsensor-logging-config.json';
Logger.configSchemeFile = 'appsensor-logging-config_schema.json';
Logger.configManager = new JSONConfigManager(new JSONConfigReadValidate(import.meta.url, Logger.configFile, Logger.configSchemeFile, LoggingConfiguration.prototype), Logger.configFile, null, true);
Logger.log4js = log.configure(new LoggingConfiguration().log4jsLoggers);
Logger.clientLogger = Logger.log4js.getLogger();
Logger.serverLogger = Logger.log4js.getLogger();
Logger.responsesLogger = Logger.log4js.getLogger();
Logger.testsLogger = Logger.log4js.getLogger();
//await to init in order not to miss a log line
await Logger.init();
export { Logger, LoggingConfiguration };