'use strict';
const rootRequire = require('rpcm-root-require');
const log4js = require('log4js');
const fse = require('fs-extra');
rootRequire('/platform-helpers/string-extensions');
/**
*
* log.setLevel(Level.WARN);
*
* log.trace("Trace Message!");
* log.debug("Debug Message!");
* log.info("Info Message!");
* log.warn("Warn Message!");
* log.error("Error Message!");
* log.fatal("Fatal Message!");
*
* Warn Message!
* Error Message!
* Fatal Message!
*
*/
class LoggerWrapper {
static #isInitialised = false;
static LogLevels = {
TRACE: 'trace',
DEBUG: 'debug',
INFO: 'info',
WARN: 'warn',
ERROR: 'error',
FATAL: 'fatal'
};
static logFileSystemInfo = {
fileName: 'application.log',
folder: '{0}/{1}'.format(rootRequire.rootPath, 'logs/app'),
fullName: '{0}/{1}/{2}'.format(rootRequire.rootPath, 'logs/app', 'application.log')
};
static getLogger = (category) => {
if (!LoggerWrapper.#isInitialised) {
fse.ensureDirSync(LoggerWrapper.logFileSystemInfo.folder);
fse.readdirSync(LoggerWrapper.logFileSystemInfo.folder).forEach(file => fse.removeSync(file));
log4js.configure({
appenders: {
out: { type: 'stdout', level: LoggerWrapper.LogLevels.INFO },
app: { type: 'fileSync', filename: LoggerWrapper.logFileSystemInfo.fullName },
file: { type: 'multiFile', base: LoggerWrapper.logFileSystemInfo.folder, property: 'fileName', extension: '.log' }
},
categories: {
default: { appenders: ['out', 'app'], level: LoggerWrapper.LogLevels.TRACE },
file: { appenders: ['file'], level: LoggerWrapper.LogLevels.TRACE }
}
});
LoggerWrapper.#isInitialised = true;
}
return log4js.getLogger(category);
};
}
module.exports = LoggerWrapper;