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