forked from CITKParus/P8-ExchangeService
137 lines
5.7 KiB
JavaScript
137 lines
5.7 KiB
JavaScript
/*
|
||
Сервис интеграции ПП Парус 8 с WEB API
|
||
Модуль ядра: протоколирование работы
|
||
*/
|
||
|
||
//----------------------
|
||
// Подключение библиотек
|
||
//----------------------
|
||
|
||
const _ = require("lodash"); //Работа с массивами и объектами
|
||
const { validateObject, getNowString } = require("./utils"); //Вспомогательные функции
|
||
const db = require("./db_connector"); //Модуль взаимодействия с БД
|
||
const {
|
||
SCONSOLE_LOG_COLOR_PATTERN_ERR,
|
||
SCONSOLE_LOG_COLOR_PATTERN_WRN,
|
||
SCONSOLE_LOG_COLOR_PATTERN_INF
|
||
} = require("./constants"); //Общие константы
|
||
const { NLOG_STATE_INF, NLOG_STATE_WRN, NLOG_STATE_ERR } = require("../models/obj_log"); //Схемы валидации записи журнала работы сервиса обмена
|
||
const prmsLoggerSchema = require("../models/prms_logger"); //Схемы валидации параметров функций модуля
|
||
|
||
//------------
|
||
// Тело модуля
|
||
//------------
|
||
|
||
//Класс управления протоколом
|
||
class Logger {
|
||
//Конструктор класса
|
||
constructor() {
|
||
this.dbConnector = null;
|
||
this.bLogDB = false;
|
||
}
|
||
//Включение/выключение записи протоколов в БД
|
||
setLogDB(bLogDB) {
|
||
if (this.dbConnector) this.bLogDB = bLogDB;
|
||
}
|
||
//Установка объекта для протоколирования в БД
|
||
setDBConnector(dbConnector, bLogDB) {
|
||
if (dbConnector instanceof db.DBConnector) {
|
||
this.dbConnector = dbConnector;
|
||
if (bLogDB === true) this.setLogDB(true);
|
||
else this.setLogDB(false);
|
||
}
|
||
}
|
||
//Удаление объекта для протоколирования в БД
|
||
removeDBConnector() {
|
||
this.dbConnector = null;
|
||
this.setLogDB(false);
|
||
}
|
||
//Протоколирование
|
||
async log(prms) {
|
||
//Фиксируем время
|
||
const sNow = getNowString();
|
||
//Проверяем структуру переданного объекта для подключения
|
||
let sCheckResult = validateObject(prms, prmsLoggerSchema.log, "Параметры функции протоколирования");
|
||
//Если структура объекта в норме
|
||
if (!sCheckResult) {
|
||
//Определим оформление сообщения
|
||
let sPrefix = "ИНФОРМАЦИЯ";
|
||
let sColorPattern = "";
|
||
switch (prms.nLogState) {
|
||
case NLOG_STATE_ERR: {
|
||
sPrefix = "ОШИБКА";
|
||
sColorPattern = SCONSOLE_LOG_COLOR_PATTERN_ERR;
|
||
break;
|
||
}
|
||
case NLOG_STATE_WRN: {
|
||
sPrefix = "ПРЕДУПРЕЖДЕНИЕ";
|
||
sColorPattern = SCONSOLE_LOG_COLOR_PATTERN_WRN;
|
||
break;
|
||
}
|
||
case NLOG_STATE_INF: {
|
||
sPrefix = "ИНФОРМАЦИЯ";
|
||
sColorPattern = SCONSOLE_LOG_COLOR_PATTERN_INF;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
//Выдаём сообщение
|
||
console.log(sColorPattern, `${sNow} ${sPrefix}: `, prms.sMsg);
|
||
//Протоколируем в БД, если это необходимо
|
||
if (this.bLogDB) {
|
||
try {
|
||
//Если есть чем протоколировать
|
||
if (this.dbConnector && this.dbConnector.bConnected) {
|
||
await this.dbConnector.putLog(prms);
|
||
}
|
||
} catch (e) {
|
||
console.log(SCONSOLE_LOG_COLOR_PATTERN_ERR, `${sNow} ОШИБКА ПРОТОКОЛИРОВАНИЯ: `, e.sMessage);
|
||
}
|
||
}
|
||
} else {
|
||
console.log(SCONSOLE_LOG_COLOR_PATTERN_ERR, `${sNow} ОШИБКА ПРОТОКОЛИРОВАНИЯ: `, sCheckResult);
|
||
console.log(prms);
|
||
}
|
||
}
|
||
//Протоколирование ошибки
|
||
async error(sMsg, prms) {
|
||
//Подготовим параметры для протоколирования
|
||
let logData = {};
|
||
if (prms) logData = _.cloneDeep(prms);
|
||
//Выставим сообщение и тип записи журнала
|
||
logData.nLogState = NLOG_STATE_ERR;
|
||
logData.sMsg = sMsg;
|
||
//Протоколируем
|
||
await this.log(logData);
|
||
}
|
||
//Протоколирование предупреждения
|
||
async warn(sMsg, prms) {
|
||
//Подготовим параметры для протоколирования
|
||
let logData = {};
|
||
if (prms) logData = _.cloneDeep(prms);
|
||
//Выставим сообщение и тип записи журнала
|
||
logData.nLogState = NLOG_STATE_WRN;
|
||
logData.sMsg = sMsg;
|
||
//Протоколируем
|
||
await this.log(logData);
|
||
}
|
||
//Протоколирование информации
|
||
async info(sMsg, prms) {
|
||
//Подготовим параметры для протоколирования
|
||
let logData = {};
|
||
if (prms) logData = _.cloneDeep(prms);
|
||
//Выставим сообщение и тип записи журнала
|
||
logData.nLogState = NLOG_STATE_INF;
|
||
logData.sMsg = sMsg;
|
||
//Протоколируем
|
||
await this.log(logData);
|
||
}
|
||
}
|
||
|
||
//-----------------
|
||
// Интерфейс модуля
|
||
//-----------------
|
||
|
||
exports.Logger = Logger;
|