Skip to content

Логирование в массив строк

#Область ПрограммныйИнтерфейс
// Процедура - Записать сообщение в лог
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// УровеньЛогирования - Число - Значение, полученное функциями УровеньЛогирования...()
// МассивЛогов - Массив Из Строка, Неопределено - Массив, в который будет записан лог. Если Неопределено, тогда создается новый массив
// ЗаписыватьУровеньОтладка - Булево - Если Ложь, то сообщения с уровнем "Отладка" не будут добавлены в массив. По умолчанию Ложь
// ВыводБезДополнительнойИнформации - Булево - Если Истина, то не будут выведена информация об уровне отладки и дате события. По умолчанию Ложь
// МаксимальнаяДлинаТелаСообщения - Число - Если задано, то тело сообщения будет обрезано до указанного числа, если нет - выведено без ограничений. По умолчанию 0.
//
Процедура ЗаписатьСообщениеВЛог(Знач Сообщение,
УровеньЛогирования,
МассивЛогов = Неопределено,
РежимОтладки = Ложь,
ВыводБезДополнительнойИнформации = Ложь,
МаксимальнаяДлинаТелаСообщения = 0) Экспорт
Если МаксимальнаяДлинаТелаСообщения > 0 Тогда
Если СтрДлина(Сообщение) > МаксимальнаяДлинаТелаСообщения Тогда
Сообщение = СтрШаблон("%1...", Лев(Сообщение, МаксимальнаяДлинаТелаСообщения - 3));
КонецЕсли;
КонецЕсли;
Если МассивЛогов = Неопределено Тогда
МассивЛогов = Новый Массив;
КонецЕсли;
Если УровеньЛогирования = УровеньЛогированияОтладка() И Не РежимОтладки Тогда
Возврат;
КонецЕсли;
Если ВыводБезДополнительнойИнформации Тогда
МассивЛогов.Добавить(Сообщение);
Иначе
ПредставлениеУровняЛога = ПредставлениеУровняЛогирования(УровеньЛогирования);
ТекстСообщения = СтрШаблон("%1 - %2", ПредставлениеУровняЛога, Сообщение);
МассивЛогов.Добавить(ТекстСообщения);
КонецЕсли;
КонецПроцедуры
// Процедура - Добавляет запись вида "[Отладка] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
// РежимОтладки - Булево - Если Истина, то запись уровня отладка будет добавлена в массив
//
Процедура ДобавитьЗаписьУровняОтладка(Сообщение, МассивЛогов, РежимОтладки = Ложь) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияОтладка(), МассивЛогов, РежимОтладки, Ложь);
КонецПроцедуры
// Процедура - Добавляет запись вида "[Информация] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
//
Процедура ДобавитьЗаписьУровняИнформация(Сообщение, МассивЛогов) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияИнформация(), МассивЛогов, Ложь, Ложь);
КонецПроцедуры
// Процедура - Добавляет запись вида "[Предупреждение] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
//
Процедура ДобавитьЗаписьУровняПредупреждение(Сообщение, МассивЛогов) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияПредупреждение(), МассивЛогов, Ложь, Ложь);
КонецПроцедуры
// Процедура - Добавляет запись вида "[Ошибка] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
//
Процедура ДобавитьЗаписьУровняОшибка(Сообщение, МассивЛогов) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияОшибка(), МассивЛогов, Ложь, Ложь);
КонецПроцедуры
// Функция - Массив логов в текст
//
// Параметры:
// МассивЛогов - Массив Из Строка - Массив логов, заполненный с помощью процедур модуля ЛогированиеКлиентСервер
// ПараметрыВывода - Структура - Параметры, полученные функцией ПараметрыВыводаМассиваЛоговВТекст()
//
// Возвращаемое значение:
// Строка - Логи выполнения в виде строки
//
Функция МассивЛоговВТекст(МассивЛогов, ПараметрыВывода) Экспорт
ВыводитьПрефикс = ПараметрыВывода.ВыводитьПрефикс;
ВыводитьЗаписиУровняОтладка = ПараметрыВывода.ВыводитьЗаписиУровняОтладка;
ВыводитьЗаписиУровняИнформация = ПараметрыВывода.ВыводитьЗаписиУровняИнформация;
ВыводитьЗаписиУровняПредупреждение = ПараметрыВывода.ВыводитьЗаписиУровняПредупреждение;
ВыводитьЗаписиУровняОшибка = ПараметрыВывода.ВыводитьЗаписиУровняОшибка;
НумероватьСтроки = ПараметрыВывода.НумероватьСтроки;
ЛогиКВыводу = Новый Массив;
Сч = 1;
Для Каждого Лог Из МассивЛогов Цикл
ТекущийУровеньЛога = УровеньЛогированияТекущегоЛога(Лог);
Если Не ВыводитьЗаписиУровняОтладка И ТекущийУровеньЛога = УровеньЛогированияОтладка() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьЗаписиУровняИнформация И ТекущийУровеньЛога = УровеньЛогированияИнформация() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьЗаписиУровняПредупреждение И ТекущийУровеньЛога = УровеньЛогированияПредупреждение() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьЗаписиУровняОшибка И ТекущийУровеньЛога = УровеньЛогированияОшибка() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьПрефикс Тогда
УдалитьПрефиксИзЛога(Лог);
КонецЕсли;
Если НумероватьСтроки Тогда
ЛогиКВыводу.Добавить(СтрШаблон("%1. %2", Сч, Лог));
Иначе
ЛогиКВыводу.Добавить(Лог);
КонецЕсли;
Сч = Сч + 1;
КонецЦикла;
Возврат СтрСоединить(ЛогиКВыводу, СтрШаблон("%1%2", Символы.ПС + Символы.ВК, Символы.ПС + Символы.ВК));
КонецФункции
// Функция - Параметры вывода массива логов в текст
//
// Возвращаемое значение:
// Структура - Структура параметров с ключами:
// * ВыводитьПрефикс - Булево - устанавливает, выводить ли представление уровня логирования.
// Истина - будет сообщение вида "[Информация] - <Сообщение>"
// Ложь - будет сообщение вида "<Сообщение>". По умолчанию Истина
// * ВыводитьЗаписиУровняОтладка - Булево - устанавливает, будут ли выведены записи уровня "Отладка". По умолчанию Истина
// * ВыводитьЗаписиУровняИнформация - Булево - устанавливает, будут ли выведены записи уровня "Информация". По умолчанию Истина
// * ВыводитьЗаписиУровняПредупреждение - Булево - устанавливает, будут ли выведены записи уровня "Предупреждение". По умолчанию Истина
// * ВыводитьЗаписиУровняОшибка - Булево - устанавливает, будут ли выведены записи уровня "Ошибка". По умолчанию Истина
//
Функция ПараметрыВыводаМассиваЛоговВТекст() Экспорт
ПараметрыВывода = Новый Структура;
ПараметрыВывода.Вставить("ВыводитьПрефикс", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняОтладка", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняИнформация", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняПредупреждение", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняОшибка", Истина);
ПараметрыВывода.Вставить("НумероватьСтроки", Ложь);
Возврат ПараметрыВывода;
КонецФункции
#Область УровниЛогирования
Функция ПредставлениеУровняЛогирования(УровеньЛогирования) Экспорт
Представление = "[Неопределено]";
Если УровеньЛогирования = УровеньЛогированияОтладка() Тогда
Представление = "[Отладка]";
ИначеЕсли УровеньЛогирования = УровеньЛогированияИнформация() Тогда
Представление = "[Информация]";
ИначеЕсли УровеньЛогирования = УровеньЛогированияПредупреждение() Тогда
Представление = "[Предупреждение]";
ИначеЕсли УровеньЛогирования = УровеньЛогированияОшибка() Тогда
Представление = "[Ошибка]";
КонецЕсли;
Возврат Представление;
КонецФункции
Функция УровеньЛогированияОтладка() Экспорт
Возврат 4;
КонецФункции
Функция УровеньЛогированияИнформация() Экспорт
Возврат 3;
КонецФункции
Функция УровеньЛогированияПредупреждение() Экспорт
Возврат 2;
КонецФункции
Функция УровеньЛогированияОшибка() Экспорт
Возврат 1;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция УровеньЛогированияТекущегоЛога(Лог)
Результат = -1;
Если СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияОтладка())) Тогда
Результат = УровеньЛогированияОтладка();
ИначеЕсли СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияИнформация())) Тогда
Результат = УровеньЛогированияИнформация();
ИначеЕсли СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияПредупреждение())) Тогда
Результат = УровеньЛогированияПредупреждение();
ИначеЕсли СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияОшибка())) Тогда
Результат = УровеньЛогированияОшибка();
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура УдалитьПрефиксИзЛога(Лог)
УровеньЛогированияЛога = УровеньЛогированияТекущегоЛога(Лог);
УдаляемаяПодстрока = СтрШаблон("%1 - ", ПредставлениеУровняЛогирования(УровеньЛогированияЛога));
Лог = СтрЗаменить(Лог, УдаляемаяПодстрока, "");
КонецПроцедуры
#КонецОбласти