kb-personal/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Логирование в массив строк .md
2025-04-25 19:31:33 +05:00

15 KiB
Raw Blame History

title, slug
title slug
Логирование в массив строк примеры-сниппеты-общее-прочее/логирование-в-массив-строк
#Область ПрограммныйИнтерфейс
 
// Процедура - Записать сообщение в лог
//
// Параметры:
//  Сообщение						 - Строка - Тело сообщения
//  УровеньЛогирования				 - Число - Значение, полученное функциями УровеньЛогирования...()
//  МассивЛогов						 - Массив Из Строка, Неопределено - Массив, в который будет записан лог. Если Неопределено, тогда создается новый массив
//  ЗаписыватьУровеньОтладка		 - Булево - Если Ложь, то сообщения с уровнем "Отладка" не будут добавлены в массив. По умолчанию Ложь
//  ВыводБезДополнительнойИнформации - Булево - Если Истина, то не будут выведена информация об уровне отладки и дате события. По умолчанию Ложь
//  МаксимальнаяДлинаТелаСообщения	 - Число - Если задано, то тело сообщения будет обрезано до указанного числа, если нет - выведено без ограничений. По умолчанию 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 - ", ПредставлениеУровняЛогирования(УровеньЛогированияЛога));
	Лог = СтрЗаменить(Лог, УдаляемаяПодстрока, "");
	
КонецПроцедуры
 
#КонецОбласти