[feature] Change logger level in Admin Panel

This commit is contained in:
PauI Ostrovckij
2025-09-30 10:25:26 +03:00
parent 839ee517d7
commit 0f52481464
6 changed files with 40 additions and 3 deletions

View File

@ -21,6 +21,7 @@
},
"log": {
"filePath": "",
"level": "WARN",
"options": {
"replaceConsole": true
}

View File

@ -9,6 +9,6 @@
}
},
"categories": {
"default": {"appenders": ["default"], "level": "ALL"}
"default": {"appenders": ["default"]}
}
}

View File

@ -9,6 +9,6 @@
}
},
"categories": {
"default": {"appenders": ["default"], "level": "WARN"}
"default": {"appenders": ["default"]}
}
}

View File

@ -214,6 +214,18 @@
}
}
}
},
"log": {
"type": "object",
"additionalProperties": true,
"x-scope": "admin",
"properties": {
"level": {
"type": "string",
"enum": ["ALL", "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "OFF"],
"description": "Logging level for the application"
}
}
}
}
}

View File

@ -34,9 +34,14 @@
const config = require('config');
const util = require('util');
const path = require('path');
const fs = require('fs');
const log4js = require('log4js');
const layouts = require('log4js/lib/layouts');
const logConfigPath = config.get('log.filePath');
let logLevel = config.get('log.level');
const fullLogConfigPath = path.resolve(__dirname, '..', logConfigPath);
// https://stackoverflow.com/a/36643588
const dateToJSONWithTZ = function (d) {
@ -78,7 +83,18 @@ log4js.addLayout('patternWithTokens', cfg => {
return layouts.patternLayout(pattern, tokens);
});
log4js.configure(config.get('log.filePath'));
exports.configureLogger = function (level = logLevel) {
const logConfig = JSON.parse(fs.readFileSync(fullLogConfigPath, 'utf8'));
Object.keys(logConfig.categories).forEach(categoryName => {
logConfig.categories[categoryName].level = level;
});
logLevel = level;
log4js.configure(logConfig);
};
exports.configureLogger();
exports.getLogLevel = function () {
return logLevel;
};
const logger = log4js.getLogger('nodeJS');

View File

@ -38,6 +38,7 @@ const config = require('config');
const NodeCache = require('node-cache');
const operationContext = require('./operationContext');
const utils = require('./utils');
const logger = require('./logger');
const cfgRuntimeConfig = config.get('runtimeConfig');
const configFilePath = cfgRuntimeConfig.filePath;
@ -102,6 +103,7 @@ async function saveConfig(ctx, config) {
*/
function handleConfigFileChange(eventTypeOrCurrent, filenameOrPrevious) {
try {
const logLevel = logger.getLogLevel();
let shouldReload = false;
if (typeof eventTypeOrCurrent === 'object' && eventTypeOrCurrent.isFile) {
@ -113,6 +115,12 @@ function handleConfigFileChange(eventTypeOrCurrent, filenameOrPrevious) {
}
if (shouldReload) {
nodeCache.del(configFileName);
// Reload config and update logging level
getConfig(operationContext.global).then(config => {
if (config.log.level !== logLevel) {
logger.configureLogger(config.log.level);
}
});
}
} catch (err) {
operationContext.global.logger.error(`handleConfigFileChange error: ${err.message}`);