1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-03-17 20:48:01 +02:00
Логирование в консоль
This commit is contained in:
alkoleft 2023-08-29 19:13:01 +03:00
parent b94dc495b5
commit 97d766cc42
5 changed files with 84 additions and 22 deletions

View File

@ -19,6 +19,7 @@
#Область ПрограммныйИнтерфейс
// Возвращает внешнюю компоненту, реализующую паузу
// Предоставляет метод `Ожидать`, `Sleep`
//
// Возвращаемое значение:
// ВнешнийОбъект
@ -28,6 +29,17 @@
КонецФункции
// Возвращает внешнюю компоненту, реализующую вывод в консоль
// Предоставляет метод `Напечатать`, `Print`
//
// Возвращаемое значение:
// ВнешнийОбъект
Функция Консоль() Экспорт
Возврат СоздатьКомпоненту(ОписаниеКомпонентыПауза());
КонецФункции
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
@ -74,7 +86,7 @@
// см. ОписаниеКомпоненты
Функция ОписаниеКомпонентыПауза() Экспорт
Возврат ОписаниеКомпоненты("ОбщийМакет.ЮТYaxUnitAddIn", "YaxUnitAddin", "Sleep");
Возврат ОписаниеКомпоненты("ОбщийМакет.ЮТYaxUnitAddIn", "YaxUnitAddin", "Common");
КонецФункции

View File

@ -62,12 +62,12 @@
#Если Клиент Тогда
Контекст = Контекст();
Если Контекст = Неопределено ИЛИ НЕ Контекст.Включено ИЛИ Контекст.ДоступенНаСервере Тогда
Если Контекст = Неопределено ИЛИ НЕ Контекст.Включено ИЛИ Контекст.ФайлЛогаДоступенНаСервере Тогда
Возврат;
КонецЕсли;
Сообщения = ЮТЛогированиеВызовСервера.НакопленныеСообщенияЛогирования(Истина);
ЗаписатьСообщения(Контекст.ФайлЛога, Сообщения);
ЗаписатьСообщения(Контекст, Сообщения);
#Иначе
ВызватьИсключение "Метод вывода серверных сообщений в лог должен вызываться с клиента";
#КонецЕсли
@ -86,13 +86,16 @@
// ПараметрыЗапуска - см. ЮТФабрика.ПараметрыЗапуска
Процедура Инициализация(ПараметрыЗапуска) Экспорт
ДанныеКонтекста = НовыйДанныеКонтекста();
ДанныеКонтекста.ФайлЛога = ПараметрыЗапуска.logging.file;
УровниЛога = УровниЛога();
Если ПараметрыЗапуска.logging.enable = Неопределено Тогда
ДанныеКонтекста.Включено = ЗначениеЗаполнено(ДанныеКонтекста.ФайлЛога);
Иначе
ДанныеКонтекста.Включено = ПараметрыЗапуска.logging.enable;
ДанныеКонтекста = НовыйДанныеКонтекста();
ДанныеКонтекста.ФайлЛога = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "file");
ДанныеКонтекста.ВыводВКонсоль = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "console", Ложь);
ДанныеКонтекста.Включено = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "enable", Неопределено);
УровеньЛога = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.logging, "level", УровниЛога.Отладка);
Если ДанныеКонтекста.Включено = Неопределено Тогда
ДанныеКонтекста.Включено = ДанныеКонтекста.ВыводВКонсоль ИЛИ ЗначениеЗаполнено(ДанныеКонтекста.ФайлЛога);
КонецЕсли;
Если НЕ ДанныеКонтекста.Включено Тогда
@ -100,24 +103,23 @@
Возврат;
КонецЕсли;
УровниЛога = УровниЛога();
Если СтрСравнить(ПараметрыЗапуска.logging.level, УровниЛога.Ошибка) = 0 Тогда
Если СтрСравнить(УровеньЛога, УровниЛога.Ошибка) = 0 Тогда
ДанныеКонтекста.УровеньЛога = 2;
ИначеЕсли СтрСравнить(ПараметрыЗапуска.logging.level, УровниЛога.Информация) = 0 Тогда
ИначеЕсли СтрСравнить(УровеньЛога, УровниЛога.Информация) = 0 Тогда
ДанныеКонтекста.УровеньЛога = 1;
Иначе
ДанныеКонтекста.УровеньЛога = 0;
КонецЕсли;
ЗначениеПроверки = Строка(Новый УникальныйИдентификатор());
ЗаписатьСообщения(ДанныеКонтекста.ФайлЛога, ЮТОбщий.ЗначениеВМассиве(ЗначениеПроверки), Ложь);
ДанныеКонтекста.ДоступенНаСервере = ЮТЛогированиеВызовСервера.ФайлЛогаДоступенНаСервере(ДанныеКонтекста.ФайлЛога, ЗначениеПроверки);
ЗаписатьСообщения(ДанныеКонтекста, ЮТОбщий.ЗначениеВМассиве(ЗначениеПроверки), Ложь);
ДанныеКонтекста.ФайлЛогаДоступенНаСервере = ЮТЛогированиеВызовСервера.ФайлЛогаДоступенНаСервере(ДанныеКонтекста.ФайлЛога, ЗначениеПроверки);
ЮТКонтекст.УстановитьЗначениеКонтекста(ИмяКонтекстаЛогирования(), ДанныеКонтекста, Истина);
Разделитель = "------------------------------------------------------";
ЗаписатьСообщения(ДанныеКонтекста.ФайлЛога, ЮТОбщий.ЗначениеВМассиве(Разделитель), Ложь);
ЗаписатьСообщения(ДанныеКонтекста, ЮТОбщий.ЗначениеВМассиве(Разделитель), Ложь);
Информация("Старт");
КонецПроцедуры
@ -284,7 +286,8 @@
// Структура - Новый данные контекста:
// * Включено - Булево - Логирование включено
// * ФайлЛога - Неопределено - Файл вывода лога
// * ДоступенНаСервере - Булево - Файл лога доступен на сервере
// * ВыводВКонсоль- Булево - Вывод лога в консоль
// * ФайлЛогаДоступенНаСервере - Булево - Файл лога доступен на сервере
// * НакопленныеЗаписи - Массив из Строка - Буфер для серверных сообщений
// * ОбщееКоличествоТестов - Число
// * КоличествоВыполненныхТестов - Число
@ -294,7 +297,8 @@
ДанныеКонтекста = Новый Структура();
ДанныеКонтекста.Вставить("Включено", Ложь);
ДанныеКонтекста.Вставить("ФайлЛога", Неопределено);
ДанныеКонтекста.Вставить("ДоступенНаСервере", Ложь);
ДанныеКонтекста.Вставить("ВыводВКонсоль", Ложь);
ДанныеКонтекста.Вставить("ФайлЛогаДоступенНаСервере", Ложь);
ДанныеКонтекста.Вставить("НакопленныеЗаписи", Новый Массив());
ДанныеКонтекста.Вставить("ОбщееКоличествоТестов", 0);
ДанныеКонтекста.Вставить("КоличествоВыполненныхТестов", 0);
@ -336,10 +340,10 @@
#КонецЕсли
Текст = СтрШаблон("%1 [%2][%3]: %4", ЮТОбщий.ПредставлениеУниверсальнойДата(), КонтекстИсполнения, УровеньЛога, Сообщение);
#Если Клиент Тогда
ЗаписатьСообщения(Контекст.ФайлЛога, ЮТОбщий.ЗначениеВМассиве(Текст));
ЗаписатьСообщения(Контекст, ЮТОбщий.ЗначениеВМассиве(Текст));
#Иначе
Если Контекст.ДоступенНаСервере Тогда
ЗаписатьСообщения(Контекст.ФайлЛога, ЮТОбщий.ЗначениеВМассиве(Текст));
Если Контекст.ФайлЛогаДоступенНаСервере Тогда
ЗаписатьСообщения(Контекст, ЮТОбщий.ЗначениеВМассиве(Текст));
Иначе
Контекст.НакопленныеЗаписи.Добавить(Текст);
КонецЕсли;
@ -347,11 +351,30 @@
КонецПроцедуры
Процедура ЗаписатьСообщения(ФайлЛога, Сообщения, Дописывать = Истина)
Процедура ЗаписатьСообщения(Контекст, Сообщения, Дописывать = Истина)
#Если ВебКлиент Тогда
ВызватьИсключение "Метод записи лога не доступен в web-клиенте";
#Иначе
Если Контекст.ВыводВКонсоль Тогда
ЗаписатьЛогВКонсоль(Сообщения);
КонецЕсли;
Если ЗначениеЗаполнено(Контекст.ФайлЛога) Тогда
ЗаписатьЛогВФайл(Контекст.ФайлЛога, Сообщения, Дописывать);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Процедура ЗаписатьЛогВФайл(ФайлЛога, Сообщения, Дописывать = Истина)
#Если ВебКлиент Тогда
ВызватьИсключение "Метод записи лога не доступен в web-клиенте";
#Иначе
Запись = Новый ЗаписьТекста(ФайлЛога, КодировкаТекста.UTF8, , Дописывать);
Для Каждого Сообщение Из Сообщения Цикл
@ -363,6 +386,24 @@
КонецПроцедуры
Процедура ЗаписатьЛогВКонсоль(Сообщения)
#Если ВебКлиент Тогда
ВызватьИсключение "Метод записи лога не доступен в web-клиенте";
#Иначе
Попытка
Консоль = ЮТКомпоненты.Консоль();
Для Каждого Сообщение Из Сообщения Цикл
Консоль.Напечатать(Сообщение);
КонецЦикла;
Исключение
КонецПопытки;
#КонецЕсли
КонецПроцедуры
Функция Прогресс()
Контекст = Контекст();

View File

@ -30,6 +30,8 @@
Чтение = Новый ЧтениеТекста(ИмяФайла);
Строка = Чтение.ПрочитатьСтроку();
Чтение.Закрыть();
Возврат Строка = ЗначениеПроверки;
Исключение

View File

@ -26,6 +26,7 @@
.ДобавитьТест("СформироватьСтрокуСимволов")
.ДобавитьТест("ДанныеСовпадают")
.ДобавитьТест("Пауза")
.ДобавитьТест("СообщитьВКонсоль")
;
КонецПроцедуры
@ -43,6 +44,12 @@
КонецПроцедуры
Процедура СообщитьВКонсоль() Экспорт
ЮТКомпоненты.Консоль().Напечатать(ТекущаяДата());
КонецПроцедуры
Процедура ДобавитьСтроку() Экспорт
Варианты = ЮТест.Варианты("Исходная, Дополнение, Разделитель, Результат")