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