2018-11-20 17:22:54 +03:00

155 lines
5.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Сервис интеграции ПП Парус 8 с WEB API
Модуль ядра: протоколирование работы
*/
//----------------------
// Подключение библиотек
//----------------------
const _ = require("lodash"); //Работа с массивами и объектами
const db = require("../core/db_connector.js"); //Модуль взаимодействия с БД
//------------
// Тело модуля
//------------
//Типы сообщений протокола
const SLOGGER_MESSAGE_TYPE_ERROR = "ERROR"; // Ошибка
const SLOGGER_MESSAGE_TYPE_WARN = "WARN"; // Предупреждение
const SLOGGER_MESSAGE_TYPE_INFO = "INFO"; // Информация
//Сообщение протокола
class LoggerMessage {
//Конструктор класса
constructor(sType, sMessage, prms) {
this.sType = sType;
this.sMessage = sMessage;
if (prms) {
this.nServiceId = prms.nServiceId;
this.nServiceFnId = prms.nServiceFnId;
this.nQueueId = prms.nQueueId;
}
}
}
//Класс управления протоколом
class Logger {
//Конструктор класса
constructor() {
this.dbConnector = "";
this.bLogDB = false;
}
//Включение/выключение записи протоколов в БД
setLogDB(bLogDB) {
this.bLogDB = bLogDB;
}
//Установка объекта для протоколирования в БД
setDBConnector(dbConnector) {
if (dbConnector instanceof db.DBConnector) {
this.dbConnector = dbConnector;
this.bLogDB = true;
}
}
//Удаление объекта для протоколирования в БД
removeDBConnector() {
this.dbConnector = "";
this.bLogDB = false;
}
//Протоколирование в БД
async logToDB(loggerMessage) {
//Если надо протоколировать и есть чем
if (this.bLogDB && this.dbConnector && this.dbConnector.bConnected) {
//Если протоколируем стандартное сообщение
if (loggerMessage instanceof LoggerMessage) {
//Подготовим доп. сведения для протокола
let logData = {};
_.extend(logData, loggerMessage);
//Анализируем тип сообщения
switch (loggerMessage.sType) {
case SLOGGER_MESSAGE_TYPE_ERROR: {
await this.dbConnector.putLogErr(loggerMessage.sMessage, logData);
break;
}
case SLOGGER_MESSAGE_TYPE_WARN: {
await this.dbConnector.putLogWrn(loggerMessage.sMessage, logData);
break;
}
case SLOGGER_MESSAGE_TYPE_INFO: {
await this.dbConnector.putLogInf(loggerMessage.sMessage, logData);
break;
}
default:
await this.dbConnector.putLogInf(loggerMessage.sMessage, logData);
break;
}
} else {
//Для нестандартных - есдиный способ протоколирования
await this.dbConnector.putLogInf(loggerMessage);
}
}
}
//Протоколирование
async log(loggerMessage) {
let sMessage = "";
let sPrefix = "LOG MESSAGE";
let sColorPattern = "";
//Конструируем сообщение
if (loggerMessage instanceof LoggerMessage) {
switch (loggerMessage.sType) {
case SLOGGER_MESSAGE_TYPE_ERROR: {
sPrefix = "ОШИБКА";
sColorPattern = "\x1b[31m%s\x1b[0m%s";
break;
}
case SLOGGER_MESSAGE_TYPE_WARN: {
sPrefix = "ПРЕДУПРЕЖДЕНИЕ";
sColorPattern = "\x1b[33m%s\x1b[0m%s";
break;
}
case SLOGGER_MESSAGE_TYPE_INFO: {
sPrefix = "ИНФОРМАЦИЯ";
sColorPattern = "\x1b[32m%s\x1b[0m%s";
break;
}
default:
break;
}
sMessage = loggerMessage.sMessage;
} else {
sMessage = loggerMessage;
}
//Выдаём сообщение
console.log(sColorPattern, sPrefix + ": ", sMessage);
//Протоколируем в БД, если это необходимо
if (this.bLogDB)
try {
await this.logToDB(loggerMessage);
} catch (e) {
console.log("LOGGER ERROR: " + e.sMessage);
}
}
//Протоколирование ошибки
async error(sMsg) {
await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_ERROR, sMsg));
}
//Протоколирование предупреждения
async warn(sMsg) {
await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_WARN, sMsg));
}
//Протоколирование информации
async info(sMsg) {
await this.log(new LoggerMessage(SLOGGER_MESSAGE_TYPE_INFO, sMsg));
}
}
//-----------------
// Интерфейс модуля
//-----------------
exports.SLOGGER_MESSAGE_TYPE_ERROR = SLOGGER_MESSAGE_TYPE_ERROR;
exports.SLOGGER_MESSAGE_TYPE_WARN = SLOGGER_MESSAGE_TYPE_WARN;
exports.SLOGGER_MESSAGE_TYPE_INFO = SLOGGER_MESSAGE_TYPE_INFO;
exports.LoggerMessage = LoggerMessage;
exports.Logger = Logger;