В конфиг добавлен параметр logQueries для журналирования запросов и времени их выполнения

This commit is contained in:
Book Pauk
2024-03-25 14:42:52 +07:00
parent 5aefa9e558
commit bbf7b43aa3
6 changed files with 42 additions and 4 deletions

View File

@@ -114,6 +114,9 @@ Options:
// включить/выключить ежеминутный вывод в лог memUsage и loadAvg
"logServerStats": false,
// включить/выключить вывод в лог запросов и времени их выполнения
"logQueries": false,
// максимальный размер кеша каждой таблицы в БД, в блоках (требуется примерно 1-10Мб памяти на один блок)
// если надо кешировать всю БД, можно поставить значение от 1000 и больше
"dbCacheSize": 5,

View File

@@ -19,6 +19,7 @@ module.exports = {
bookReadLink: '',
loggingEnabled: true,
logServerStats: false,
logQueries: false,
//поправить в случае, если были критические изменения в DbCreator или InpxParser
//иначе будет рассинхронизация по кешу между сервером и клиентом на уровне БД

View File

@@ -13,6 +13,7 @@ const propsToSave = [
'bookReadLink',
'loggingEnabled',
'logServerStats',
'logQueries',
'dbCacheSize',
'maxFilesDirSize',
'queryCacheEnabled',

View File

@@ -56,11 +56,12 @@ class WebSocketController {
async onMessage(ws, message) {
let req = {};
try {
if (this.isDevelopment) {
log(`WebSocket-IN: ${message.substr(0, 4000)}`);
if (this.isDevelopment || this.config.logQueries) {
log(`WebSocket-IN: ${utils.cutString(message)}`);
}
req = JSON.parse(message);
req.__startTime = Date.now();
ws.lastActivity = Date.now();
@@ -123,8 +124,9 @@ class WebSocketController {
const message = JSON.stringify(r);
ws.send(message);
if (this.isDevelopment) {
log(`WebSocket-OUT: ${message.substr(0, 200)}`);
if (this.isDevelopment || this.config.logQueries) {
log(`WebSocket-OUT: ${utils.cutString(message)}`);
log(`${Date.now() - req.__startTime}ms`);
}
}

View File

@@ -196,6 +196,20 @@ function wordEnding(num, type = 0) {
}
}
function cutString(data, len = 500) {
try {
if (!data)
return '';
if (typeof(data) !== 'string')
data = JSON.stringify(data);
return `${data.substring(0, len)}${data.length > len ? ' ...' : ''}`;
} catch (e) {
return '';
}
}
module.exports = {
sleep,
processLoop,
@@ -216,4 +230,5 @@ module.exports = {
makeValidFileName,
makeValidFileNameOrEmpty,
wordEnding,
cutString,
};

View File

@@ -137,6 +137,18 @@ async function init() {
}
}
function logQueries(app) {
app.use(function(req, res, next) {
const start = Date.now();
log(`${req.method} ${req.originalUrl} ${utils.cutString(req.body)}`);
//log(`${JSON.stringify(req.headers, null, 2)}`)
res.once('finish', () => {
log(`${Date.now() - start}ms`);
});
next();
});
}
async function main() {
const log = new (require('./core/AppLogger'))().log;//singleton
@@ -168,6 +180,10 @@ async function main() {
const { WebSocketController } = require('./controllers');
new WebSocketController(wss, webAccess, config);
if (config.logQueries) {
logQueries(app);
}
if (devModule) {
devModule.logErrors(app);
} else {