В конфиг добавлен параметр logQueries для журналирования запросов и времени их выполнения
This commit is contained in:
@@ -114,6 +114,9 @@ Options:
|
||||
// включить/выключить ежеминутный вывод в лог memUsage и loadAvg
|
||||
"logServerStats": false,
|
||||
|
||||
// включить/выключить вывод в лог запросов и времени их выполнения
|
||||
"logQueries": false,
|
||||
|
||||
// максимальный размер кеша каждой таблицы в БД, в блоках (требуется примерно 1-10Мб памяти на один блок)
|
||||
// если надо кешировать всю БД, можно поставить значение от 1000 и больше
|
||||
"dbCacheSize": 5,
|
||||
|
||||
@@ -19,6 +19,7 @@ module.exports = {
|
||||
bookReadLink: '',
|
||||
loggingEnabled: true,
|
||||
logServerStats: false,
|
||||
logQueries: false,
|
||||
|
||||
//поправить в случае, если были критические изменения в DbCreator или InpxParser
|
||||
//иначе будет рассинхронизация по кешу между сервером и клиентом на уровне БД
|
||||
|
||||
@@ -13,6 +13,7 @@ const propsToSave = [
|
||||
'bookReadLink',
|
||||
'loggingEnabled',
|
||||
'logServerStats',
|
||||
'logQueries',
|
||||
'dbCacheSize',
|
||||
'maxFilesDirSize',
|
||||
'queryCacheEnabled',
|
||||
|
||||
@@ -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`);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user