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