В конфиг добавлен параметр logQueries для журналирования запросов и времени их выполнения
This commit is contained in:
@@ -114,6 +114,9 @@ Options:
|
|||||||
// включить/выключить ежеминутный вывод в лог memUsage и loadAvg
|
// включить/выключить ежеминутный вывод в лог memUsage и loadAvg
|
||||||
"logServerStats": false,
|
"logServerStats": false,
|
||||||
|
|
||||||
|
// включить/выключить вывод в лог запросов и времени их выполнения
|
||||||
|
"logQueries": false,
|
||||||
|
|
||||||
// максимальный размер кеша каждой таблицы в БД, в блоках (требуется примерно 1-10Мб памяти на один блок)
|
// максимальный размер кеша каждой таблицы в БД, в блоках (требуется примерно 1-10Мб памяти на один блок)
|
||||||
// если надо кешировать всю БД, можно поставить значение от 1000 и больше
|
// если надо кешировать всю БД, можно поставить значение от 1000 и больше
|
||||||
"dbCacheSize": 5,
|
"dbCacheSize": 5,
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ module.exports = {
|
|||||||
bookReadLink: '',
|
bookReadLink: '',
|
||||||
loggingEnabled: true,
|
loggingEnabled: true,
|
||||||
logServerStats: false,
|
logServerStats: false,
|
||||||
|
logQueries: false,
|
||||||
|
|
||||||
//поправить в случае, если были критические изменения в DbCreator или InpxParser
|
//поправить в случае, если были критические изменения в DbCreator или InpxParser
|
||||||
//иначе будет рассинхронизация по кешу между сервером и клиентом на уровне БД
|
//иначе будет рассинхронизация по кешу между сервером и клиентом на уровне БД
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ const propsToSave = [
|
|||||||
'bookReadLink',
|
'bookReadLink',
|
||||||
'loggingEnabled',
|
'loggingEnabled',
|
||||||
'logServerStats',
|
'logServerStats',
|
||||||
|
'logQueries',
|
||||||
'dbCacheSize',
|
'dbCacheSize',
|
||||||
'maxFilesDirSize',
|
'maxFilesDirSize',
|
||||||
'queryCacheEnabled',
|
'queryCacheEnabled',
|
||||||
|
|||||||
@@ -56,11 +56,12 @@ class WebSocketController {
|
|||||||
async onMessage(ws, message) {
|
async onMessage(ws, message) {
|
||||||
let req = {};
|
let req = {};
|
||||||
try {
|
try {
|
||||||
if (this.isDevelopment) {
|
if (this.isDevelopment || this.config.logQueries) {
|
||||||
log(`WebSocket-IN: ${message.substr(0, 4000)}`);
|
log(`WebSocket-IN: ${utils.cutString(message)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
req = JSON.parse(message);
|
req = JSON.parse(message);
|
||||||
|
req.__startTime = Date.now();
|
||||||
|
|
||||||
ws.lastActivity = Date.now();
|
ws.lastActivity = Date.now();
|
||||||
|
|
||||||
@@ -123,8 +124,9 @@ class WebSocketController {
|
|||||||
const message = JSON.stringify(r);
|
const message = JSON.stringify(r);
|
||||||
ws.send(message);
|
ws.send(message);
|
||||||
|
|
||||||
if (this.isDevelopment) {
|
if (this.isDevelopment || this.config.logQueries) {
|
||||||
log(`WebSocket-OUT: ${message.substr(0, 200)}`);
|
log(`WebSocket-OUT: ${utils.cutString(message)}`);
|
||||||
|
log(`${Date.now() - req.__startTime}ms`);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 = {
|
module.exports = {
|
||||||
sleep,
|
sleep,
|
||||||
processLoop,
|
processLoop,
|
||||||
@@ -216,4 +230,5 @@ module.exports = {
|
|||||||
makeValidFileName,
|
makeValidFileName,
|
||||||
makeValidFileNameOrEmpty,
|
makeValidFileNameOrEmpty,
|
||||||
wordEnding,
|
wordEnding,
|
||||||
|
cutString,
|
||||||
};
|
};
|
||||||
@@ -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() {
|
async function main() {
|
||||||
const log = new (require('./core/AppLogger'))().log;//singleton
|
const log = new (require('./core/AppLogger'))().log;//singleton
|
||||||
|
|
||||||
@@ -168,6 +180,10 @@ async function main() {
|
|||||||
const { WebSocketController } = require('./controllers');
|
const { WebSocketController } = require('./controllers');
|
||||||
new WebSocketController(wss, webAccess, config);
|
new WebSocketController(wss, webAccess, config);
|
||||||
|
|
||||||
|
if (config.logQueries) {
|
||||||
|
logQueries(app);
|
||||||
|
}
|
||||||
|
|
||||||
if (devModule) {
|
if (devModule) {
|
||||||
devModule.logErrors(app);
|
devModule.logErrors(app);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user