kb-personal/src/content/docs/knowledge-base/Примеры/1. Общие/Логирование в массив строк .md
2025-06-16 21:38:11 +05:00

242 lines
15 KiB
Markdown
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.

---
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 - ", ПредставлениеУровняЛогирования(УровеньЛогированияЛога));
Лог = СтрЗаменить(Лог, УдаляемаяПодстрока, "");
КонецПроцедуры
#КонецОбласти
```