UNPKG

@appsensorlike/appsensorlike

Version:

A port of OWASP AppSensor reference implementation

112 lines (111 loc) 3.78 kB
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 };