diff --git a/packagedef b/packagedef index 6885d7c..75b4490 100644 --- a/packagedef +++ b/packagedef @@ -1,6 +1,6 @@  Описание.Имя("logos") - .Версия("1.3.0") + .Версия("1.4.0") .ЗависитОт("asserts", "0.4.0") .ВключитьФайл("src") .ВключитьФайл("tests") diff --git a/src/file-appender.os b/src/file-appender.os index 8533150..5407dd0 100644 --- a/src/file-appender.os +++ b/src/file-appender.os @@ -4,21 +4,21 @@ // ////////////////////////////////////////////////////////////////////////// -Перем мФайлЛога; +Перем ФайлЛога; Процедура ОткрытьФайл(Знач Путь, Знач Кодировка = "utf-8", Знач Добавлять = Истина) Экспорт - мФайлЛога = Новый ЗаписьТекста(Путь, Кодировка,,Добавлять); + ФайлЛога = Новый ЗаписьТекста(Путь, Кодировка,,Добавлять); КонецПроцедуры Процедура Вывести(Знач Сообщение, Знач УровеньСообщения) Экспорт ПроверитьИнициализацию(); - мФайлЛога.ЗаписатьСтроку(Сообщение); + ФайлЛога.ЗаписатьСтроку(Сообщение); КонецПроцедуры Процедура Закрыть() Экспорт ПроверитьИнициализацию(); - мФайлЛога.Закрыть(); - мФайлЛога = Неопределено; + ФайлЛога.Закрыть(); + ФайлЛога = Неопределено; КонецПроцедуры // Устанавливает свойство аппендера, заданное в конфигурационном файле @@ -30,7 +30,7 @@ КонецПроцедуры // УстановитьСвойство() Процедура ПроверитьИнициализацию() - Если мФайлЛога = Неопределено Тогда + Если ФайлЛога = Неопределено Тогда ВызватьИсключение "Не открыт файл лога"; КонецЕсли; КонецПроцедуры diff --git a/src/levels.os b/src/levels.os index 6003147..41ee7dc 100644 --- a/src/levels.os +++ b/src/levels.os @@ -15,20 +15,30 @@ Возврат мНаименованиеУровней[Уровень]; КонецФункции +// Вернуть все возможнные уровни +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - результат +// * Ключ - Строка - имя уровня, Отладка, Информация и т.п. +// * Ключ - Число - показатель уровня. У Отладка 0 (мин), у Отключить 5 (макс) +// +Функция Уровни() Экспорт + Возврат Новый ФиксированнаяСтруктура(мУровниПриоритета); +КонецФункции ////////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ // Процедура Инициализация() - + ИнициализироватьУровни(); ИнициализироватьНаименованияУровней(); - + КонецПроцедуры Процедура ИнициализироватьУровни() - + мУровниПриоритета = Новый Структура; мУровниПриоритета.Вставить("Отладка" , 0); мУровниПриоритета.Вставить("Информация" , 1); @@ -36,17 +46,15 @@ мУровниПриоритета.Вставить("Ошибка" , 3); мУровниПриоритета.Вставить("КритичнаяОшибка", 4); мУровниПриоритета.Вставить("Отключить" , 5); - - мТекущийУровень = мУровниПриоритета.Информация; - + Для Каждого КлючИЗначение Из мУровниПриоритета Цикл ЭтотОбъект[КлючИЗначение.Ключ] = КлючИЗначение.Значение; КонецЦикла; - + КонецПроцедуры Процедура ИнициализироватьНаименованияУровней() - + мНаименованиеУровней = Новый Соответствие; мНаименованиеУровней.Вставить(мУровниПриоритета.Отладка , "ОТЛАДКА"); мНаименованиеУровней.Вставить(мУровниПриоритета.Информация , "ИНФОРМАЦИЯ"); @@ -57,4 +65,4 @@ КонецПроцедуры -Инициализация(); \ No newline at end of file +Инициализация(); diff --git a/src/log.os b/src/log.os index 45c2392..ec77f0c 100644 --- a/src/log.os +++ b/src/log.os @@ -9,6 +9,7 @@ Перем мСпособыВывода; Перем мСпособВыводаЗаданВручную; Перем мУровниАппендеров; +Перем НастройкаВыводаСообщений; Перем мИдентификатор; Перем мРаскладкаСообщения; @@ -24,15 +25,15 @@ Возврат мТекущийУровень; КонецФункции -Функция Поля(Поле1 = Неопределено, ЗначениеПоля1 = Неопределено, +Функция Поля(Поле1 = Неопределено, ЗначениеПоля1 = Неопределено, Поле2 = Неопределено, ЗначениеПоля2 = Неопределено, Поле3 = Неопределено, ЗначениеПоля3 = Неопределено, Поле4 = Неопределено, ЗначениеПоля4 = Неопределено ) Экспорт - - + + НаборПолей = Новый Соответствие(); - + Если НЕ Поле1 = Неопределено Тогда НаборПолей.Вставить(Поле1, ЗначениеПоля1); КонецЕсли; @@ -45,29 +46,29 @@ Если НЕ Поле4 = Неопределено Тогда НаборПолей.Вставить(Поле4, ЗначениеПоля4); КонецЕсли; - + Возврат ПоляИз(НаборПолей); КонецФункции Функция ПоляИз(Знач НаборПолей, Знач КлючиИсключения = "") Экспорт - + ЛогСПолями = Новый Лог(мИмяЛога); ЛогСПолями.УстановитьРаскладку(мРаскладкаСообщения); ЛогСПолями.УстановитьУровень(мТекущийУровень); Если мСпособВыводаЗаданВручную Тогда Для каждого СпособВыбора Из мСпособыВывода Цикл - + ЛогСПолями.ДобавитьСпособВывода(СпособВыбора, мУровниАппендеров[СпособВыбора].Уровень); - + КонецЦикла; КонецЕсли; ДополнительныеПоля = Новый Соответствие(); Если мДополнительныеПоляЛога.Количество() > 0 Тогда - + Для каждого ПолеРодителя Из мДополнительныеПоляЛога Цикл ДополнительныеПоля.Вставить(ПолеРодителя.Ключ, ПолеРодителя.Значение); КонецЦикла; @@ -77,8 +78,8 @@ МассивКлючейИсключения = ПолучитьМассивКлючейИсключения(КлючиИсключения); Для каждого ПолеНабора Из НаборПолей Цикл - - Если МассивКлючейИсключения.Количество() > 0 + + Если МассивКлючейИсключения.Количество() > 0 И Не МассивКлючейИсключения.Найти(ПолеНабора.Ключ) = Неопределено Тогда Продолжить; КонецЕсли; @@ -95,7 +96,7 @@ КонецФункции Функция ПолучитьМассивКлючейИсключения(Знач КлючиИсключения) - + МассивКлючей = Новый Массив(); Если Не ЗначениеЗаполнено(КлючиИсключения) Тогда @@ -103,7 +104,7 @@ КонецЕсли; МассивКлючейИсключения = СтрРазделить(КлючиИсключения, ","); - + Для каждого ЭлементМассива Из МассивКлючейИсключения Цикл МассивКлючей.Добавить(СокрЛП(ЭлементМассива)); КонецЦикла; @@ -117,12 +118,14 @@ КонецПроцедуры Процедура УстановитьУровень(Знач Уровень) Экспорт - Если Уровень < 0 или Уровень > УровниЛога.Отключить Тогда + Если Уровень < 0 Или Уровень > УровниЛога.Отключить Тогда ВызватьИсключение "Неверное значение аргумента 'Уровень'"; КонецЕсли; мТекущийУровень = Уровень; + МинимальныйУровень = Уровень; + Если ЗначениеЗаполнено(мУровниАппендеров) Тогда Для каждого КлючЗначение Из мУровниАппендеров Цикл СпособВывода = КлючЗначение.Ключ; @@ -130,9 +133,16 @@ Если Не НастройкаСпособаВывода.ЗаданЯвно Тогда НастройкаСпособаВывода.Уровень = Уровень; КонецЕсли; + + Если НастройкаСпособаВывода.Уровень < Уровень Тогда + МинимальныйУровень = НастройкаСпособаВывода.Уровень; + КонецЕсли; КонецЦикла; + КонецЕсли; + ЗаполнитьНастройкуВыводаСообщений(МинимальныйУровень); + Для каждого ВложенныйЛог Из мВложенныеЛоги Цикл ВложенныйЛог.УстановитьУровень(Уровень); КонецЦикла; @@ -162,7 +172,7 @@ КонецПроцедуры -// Возвращает признак ручного/собственного задания способа вывода +// Возвращает признак ручного/собственного задания способа вывода // // Возвращаемое значение: // Булево - Истина, если добавляли свои способы вывода, и Ложь, если не добавляли @@ -183,11 +193,13 @@ Если НовыйУровеньСпособаВывода <> Неопределено Тогда НовыйУровень = НовыйУровеньСпособаВывода; ЗаданЯвно = Истина; + + УточнитьНастройкуВыводаСообщенийДляНовогоУровня(НовыйУровень); Иначе НовыйУровень = Уровень(); ЗаданЯвно = Ложь; КонецЕсли; - + НастройкаСпособаВывода = НоваяНастройкаСпособаВывода(НовыйУровень, ЗаданЯвно); мУровниАппендеров[СпособВывода] = НастройкаСпособаВывода; @@ -202,7 +214,7 @@ Процедура ПроверитьПоддержкуAPIВывести(СпособВывода, НастройкаСпособаВывода) Рефлектор = Новый Рефлектор; Методы = Рефлектор.ПолучитьТаблицуМетодов(СпособВывода); - + МетодВывестиСобытие = Методы.Найти("ВывестиСобытие"); Если МетодВывестиСобытие <> Неопределено Тогда НастройкаСпособаВывода.ВерсияAPI = 3; @@ -223,7 +235,7 @@ Процедура ОпределитьВерсиюAPIРаскладкиСообщения() мВерсияAPIРаскладкиСообщения = 1; - + Рефлектор = Новый Рефлектор; Методы = Рефлектор.ПолучитьТаблицуМетодов(мРаскладкаСообщения); МетодПолучитьФорматированноеСообщение = Методы.Найти("ПолучитьФорматированноеСообщение"); @@ -312,17 +324,19 @@ Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт - Если УровеньСообщения < Уровень() Тогда + ВыводитьСообщение = НастройкаВыводаСообщений[УровеньСообщения]; + + Если Не ВыводитьСообщение Тогда Возврат; КонецЕсли; Если ЕстьЗаполненныеПараметры(Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9) Тогда - + Сообщение = СтрШаблон(Сообщение, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); КонецЕсли; - + СтроительСобытияЛога = Новый СтроительСобытияЛога; СтроительСобытияЛога.УстановитьИмяЛога(мИмяЛога); СтроительСобытияЛога.УстановитьУровень(УровеньСообщения); @@ -330,16 +344,16 @@ СтроительСобытияЛога.УстановитьСообщение(Сообщение); СтроительСобытияЛога.УстановитьВремяСобытия(ТекущаяУниверсальнаяДатаВМиллисекундах()); СтроительСобытияЛога.УстановитьДополнительныеПоля(мДополнительныеПоляЛога); - + СобытиеЛога = СтроительСобытияЛога.Создать(); - + Если мВерсияAPIРаскладкиСообщения = 2 Тогда ВыводимоеСообщение = мРаскладкаСообщения.ПолучитьФорматированноеСообщение(СобытиеЛога); Иначе ВыводимоеСообщение = мРаскладкаСообщения.Форматировать(СобытиеЛога.ПолучитьУровень(), СобытиеЛога.ПолучитьСообщение()); КонецЕсли; СобытиеЛога.УстановитьФорматированноеСообщение(ВыводимоеСообщение); - + Для Каждого СпособВывода Из мСпособыВывода Цикл НастройкаАппендера = мУровниАппендеров[СпособВывода]; УровеньСпособаВывода = НастройкаАппендера.Уровень; @@ -379,24 +393,25 @@ ИначеЕсли НЕ Параметр9 = Неопределено Тогда Возврат Истина; КонецЕсли; - + Возврат Ложь; КонецФункции Процедура Инициализация() - + мВложенныеЛоги = Новый Массив(); мИдентификатор = Новый УникальныйИдентификатор; мДополнительныеПоляЛога = Новый Соответствие(); + НастройкаВыводаСообщений = НоваяНастройкаВыводаСообщений(); УстановитьУровень(УровниЛога.Информация); ИнициализироватьСпособыВывода(); - + КонецПроцедуры Процедура ИнициализироватьСпособыВывода() - + УстановитьРаскладку(Новый ОсновнаяРаскладкаСообщения); мСпособВыводаЗаданВручную = Ложь; @@ -409,11 +424,39 @@ мУровниАппендеров[ВыводПоУмолчанию] = НастройкаСпособаВывода; ПроверитьПоддержкуAPIВывести(ВыводПоУмолчанию, НастройкаСпособаВывода); - + +КонецПроцедуры + +Функция НоваяНастройкаВыводаСообщений() + Уровни = УровниЛога.Уровни(); + Результат = Новый Массив(Уровни.Количество()); + Для каждого КлючЗначение Из Уровни Цикл + Результат[КлючЗначение.Значение] = Ложь; + КонецЦикла; + Возврат Результат; +КонецФункции + +Процедура ЗаполнитьНастройкуВыводаСообщений(Знач МинимальныйУровень) + Для УровеньФильтра = 0 По НастройкаВыводаСообщений.ВГраница() Цикл + РазрешенВыводСообщений = УровеньФильтра >= МинимальныйУровень; + НастройкаВыводаСообщений[УровеньФильтра] = РазрешенВыводСообщений; + КонецЦикла; +КонецПроцедуры + +Процедура УточнитьНастройкуВыводаСообщенийДляНовогоУровня(Знач НовыйУровень) + Для УровеньФильтра = 0 По НастройкаВыводаСообщений.ВГраница() Цикл + Если НовыйУровень <= УровеньФильтра Тогда + РазрешенВыводСообщений = Истина; + Иначе + РазрешенВыводСообщений = НастройкаВыводаСообщений[УровеньФильтра]; + КонецЕсли; + НастройкаВыводаСообщений[УровеньФильтра] = РазрешенВыводСообщений; + КонецЦикла; + КонецПроцедуры Функция НоваяНастройкаСпособаВывода(Знач НовыйУровень, Знач ЗаданЯвно) - + НастройкаСпособаВывода = Новый Структура("Уровень, ЗаданЯвно, ВерсияAPI", НовыйУровень, ЗаданЯвно, Неопределено); Возврат НастройкаСпособаВывода; diff --git a/tests/logos-test.os b/tests/logos-test.os index 2846c89..fec4cba 100644 --- a/tests/logos-test.os +++ b/tests/logos-test.os @@ -43,6 +43,8 @@ МассивТестов.Добавить("Тест_ДолженВывестиВЛогПростуюСтрокуБезПараметров"); МассивТестов.Добавить("Тест_ДолженВывестиВЛогПростуюСтрокуСПустымПараметром"); МассивТестов.Добавить("Тест_ДолженПроверитьНастройкуРазныхУровнейУРазныхСпособовВывода"); + МассивТестов.Добавить("Тест_ДолженПроверитьНастройкуРазныхУровнейУРазныхСпособовВывода_ИнформацияЗатемОтладка"); + МассивТестов.Добавить("Тест_ДолженПроверитьНастройкуРазныхУровнейУРазныхСпособовВывода_ОтладкаЗатемИнформация"); МассивТестов.Добавить("Тест_ДолженПроверитьСменуУровняСпособаВыводаПриПереустановкеУровняЛога"); МассивТестов.Добавить("Тест_ДолженПроверитьДобавлениеИмениЛогаДляУровняОтладка"); МассивТестов.Добавить("Тест_ДолженПроверитьОтсутствиеСменыЯвноЗаданногоУровняСпособаВыводаПриПереустановкеУровняЛога"); @@ -62,7 +64,7 @@ ПеремСредыУровняЛогаСохр = ПолучитьПеременнуюСреды("LOGOS_LEVEL"); УстановитьПеременнуюСреды("LOGOS_CONFIG", ""); УстановитьПеременнуюСреды("LOGOS_LEVEL", ""); - + КонецПроцедуры Процедура ПослеЗапускаТеста() Экспорт @@ -100,8 +102,8 @@ ВФайл = Новый ВыводЛогаВФайл(); Утверждения.ПроверитьРавенство(Тип("ВыводЛогаВФайл"), ТипЗнч(ВФайл)); - Консоль = Новый ВыводЛогаВКонсоль(); - Утверждения.ПроверитьРавенство(Тип("ВыводЛогаВКонсоль"), ТипЗнч(Консоль)); + ВыводЛогаВКонсоль = Новый ВыводЛогаВКонсоль(); + Утверждения.ПроверитьРавенство(Тип("ВыводЛогаВКонсоль"), ТипЗнч(ВыводЛогаВКонсоль)); КонецПроцедуры @@ -234,7 +236,7 @@ КонецПроцедуры Процедура Тест_ДолженВывестиВЛогПростуюСтрокуБезПараметров() Экспорт - + ДобавитьСебяКакОбработчикаВывода(); Лог.УстановитьУровень(УровниЛога.Информация); Лог.Информация("Привет"); @@ -243,16 +245,16 @@ КонецПроцедуры Процедура Тест_ДолженВывестиВЛогПростуюСтрокуСПустымПараметром() Экспорт - + ДобавитьСебяКакОбработчикаВывода(); Лог.УстановитьУровень(УровниЛога.Информация); Лог.Информация("Привет <%1>", Неопределено); Утверждения.ПроверитьРавенство("ИНФОРМАЦИЯ - Привет <%1>", мСообщенияЛога[0]); КонецПроцедуры - + Процедура ДобавитьСебяКакОбработчикаВывода(Знач НовыйУровень = Неопределено) - + мСообщенияЛога = Новый Массив; Лог.ДобавитьСпособВывода(ЭтотОбъект, НовыйУровень); @@ -278,7 +280,7 @@ КонецПроцедуры Процедура Тест_ДолженПрочитатьНастройкиЛогированияИзФайла() Экспорт - + ФайлНастроек = ВременныеФайлы.НовоеИмяФайла("cfg"); ЗаписьТекста = Новый ЗаписьТекста(ФайлНастроек); @@ -300,7 +302,7 @@ НастройкиЛогаОтладки = Настройки.Получить("debuglog"); Ожидаем.Что(НастройкиЛогаОтладки.Уровень).Равно(УровниЛога.Отладка); Ожидаем.Что(НастройкиЛогаОтладки.СпособыВывода).ИмеетДлину(1); - + ОписаниеАппендера = НастройкиЛогаОтладки.СпособыВывода["debugfile"]; Ожидаем.Что(ОписаниеАппендера.Класс).Равно("ВыводЛогаВФайл"); Ожидаем.Что(ОписаниеАппендера.Уровень).Равно(УровниЛога.Предупреждение); @@ -310,7 +312,7 @@ КонецПроцедуры Процедура Тест_ДолженПрочитатьНастройкиЛогированияИзПеременнойСреды() Экспорт - + УстановитьПеременнуюСреды("LOGOS_CONFIG", "logger.errlog=ERROR;logger.debuglog=DEBUG, debugfile;appender.debugfile=ВыводЛогаВФайл;appender.debugfile.level=WARN;appender.debugfile.file=/tmp/logostestdebug;appender.debugfile.anotherprop=hello world"); Логирование.ОбновитьНастройки(); @@ -328,7 +330,7 @@ НастройкиЛогаОтладки = Настройки.Получить("debuglog"); Ожидаем.Что(НастройкиЛогаОтладки.Уровень).Равно(УровниЛога.Отладка); Ожидаем.Что(НастройкиЛогаОтладки.СпособыВывода).ИмеетДлину(1); - + ОписаниеАппендера = НастройкиЛогаОтладки.СпособыВывода["debugfile"]; Ожидаем.Что(ОписаниеАппендера.Класс).Равно("ВыводЛогаВФайл"); Ожидаем.Что(ОписаниеАппендера.Уровень).Равно(УровниЛога.Предупреждение); @@ -338,7 +340,7 @@ КонецПроцедуры Процедура Тест_ДолженПроверитьЧтоКорневойЛоггерВлияетНаВсеСоздаваемые() Экспорт - + УстановитьПеременнуюСреды("LOGOS_CONFIG", "logger.rootLogger=DEBUG"); Логирование.ОбновитьНастройки(); @@ -348,7 +350,7 @@ КонецПроцедуры Процедура Тест_ДолженПроверитьЧтоКорневойЛоггерВлияетНаВсеСоздаваемыеПриДругойПеременнойСреды() Экспорт - + УстановитьПеременнуюСреды("LOGOS_LEVEL", "DEBUG"); Логирование.ОбновитьНастройки(); @@ -358,7 +360,7 @@ КонецПроцедуры Процедура Тест_ДолженПроверитьЧтоКорневойЛоггерВлияетНаВсеСоздаваемыеПриДругойПеременнойСредыПриУровнеОшибка() Экспорт - + УстановитьПеременнуюСреды("LOGOS_LEVEL", "ERROR"); Логирование.ОбновитьНастройки(); @@ -368,7 +370,7 @@ КонецПроцедуры Процедура Тест_ДолженПроверитьПриоритетПеременныхСреды() Экспорт - + УстановитьПеременнуюСреды("LOGOS_LEVEL", "ERROR"); УстановитьПеременнуюСреды("LOGOS_CONFIG", "logger.rootLogger=DEBUG"); Логирование.ОбновитьНастройки(); @@ -379,7 +381,7 @@ КонецПроцедуры Процедура Тест_ДолженПроверитьЧтоТочечнаяНастройкаЗаменяетКорневую() Экспорт - + УстановитьПеременнуюСреды("LOGOS_CONFIG", "logger.rootLogger=DEBUG;logger.specificLogger=WARN"); Логирование.ОбновитьНастройки(); @@ -393,20 +395,20 @@ Процедура Тест_ДолженПроверитьНастройкуРазныхУровнейУРазныхСпособовВывода() Экспорт Лог = Логирование.ПолучитьЛог("testlog"); Лог.УстановитьУровень(УровниЛога.Информация); - + ДобавитьСебяКакОбработчикаВывода(); - + Ожидаем.Что(Лог.УровеньСпособаВывода(ЭтотОбъект), "УровеньСпособаВывода(ЭтотОбъект)").Равно(УровниЛога.Информация); - + ВторойСпособВывода = ЗагрузитьСценарий(ОбъединитьПути(ПутьКТестам(), "fixtures", "appender-debug.os")); - - Лог.ДобавитьСпособВывода(ВторойСпособВывода, УровниЛога.ПРЕДУПРЕЖДЕНИЕ); + + Лог.ДобавитьСпособВывода(ВторойСпособВывода, УровниЛога.ПРЕДУПРЕЖДЕНИЕ); Ожидаем.Что(Лог.УровеньСпособаВывода(ВторойСпособВывода), "УровеньСпособаВывода(ВторойСпособВывода)").Равно(УровниЛога.ПРЕДУПРЕЖДЕНИЕ); - + Лог.Информация("Привет"); Лог.Предупреждение("Внимание"); Лог.Отладка("Отладка включена"); - + Ожидаем.Что(мСообщенияЛога).ИмеетДлину(2); Ожидаем.Что(мСообщенияЛога[0], "мСообщенияЛога[0]").Равно("ИНФОРМАЦИЯ - "+"Привет"); Ожидаем.Что(мСообщенияЛога[1], "мСообщенияЛога[1]").Равно("ПРЕДУПРЕЖДЕНИЕ - "+"Внимание"); @@ -416,20 +418,78 @@ Ожидаем.Что(Сообщения2[0], "ВторойСпособВывода 0").Равно("ПРЕДУПРЕЖДЕНИЕ - "+"Внимание"); КонецПроцедуры +Процедура Тест_ДолженПроверитьНастройкуРазныхУровнейУРазныхСпособовВывода_ИнформацияЗатемОтладка() Экспорт + Лог = Логирование.ПолучитьЛог("testlog"); + Лог.УстановитьУровень(УровниЛога.Информация); + + ДобавитьСебяКакОбработчикаВывода(); + + Ожидаем.Что(Лог.УровеньСпособаВывода(ЭтотОбъект), "УровеньСпособаВывода(ЭтотОбъект)").Равно(УровниЛога.Информация); + + ВторойСпособВывода = ЗагрузитьСценарий(ОбъединитьПути(ПутьКТестам(), "fixtures", "appender-debug.os")); + + Лог.ДобавитьСпособВывода(ВторойСпособВывода, УровниЛога.Отладка); + Ожидаем.Что(Лог.УровеньСпособаВывода(ВторойСпособВывода), "УровеньСпособаВывода(ВторойСпособВывода)").Равно(УровниЛога.Отладка); + + Лог.Информация("Привет"); + Лог.Предупреждение("Внимание"); + Лог.Отладка("Отладка включена"); + + Ожидаем.Что(мСообщенияЛога[0], "мСообщенияЛога[0]").Равно("ИНФОРМАЦИЯ - "+"Привет"); + Ожидаем.Что(мСообщенияЛога[1], "мСообщенияЛога[1]").Равно("ПРЕДУПРЕЖДЕНИЕ - "+"Внимание"); + Ожидаем.Что(мСообщенияЛога).ИмеетДлину(2); + + Сообщения2 = ВторойСпособВывода.ПолучитьСообщения(); + Ожидаем.Что(Сообщения2[0], "ВторойСпособВывода 0").Равно("ИНФОРМАЦИЯ - "+"Привет"); + Ожидаем.Что(Сообщения2[1], "ВторойСпособВывода 1").Равно("ПРЕДУПРЕЖДЕНИЕ - "+"Внимание"); + Ожидаем.Что(Сообщения2[2], "ВторойСпособВывода 2").Равно("ОТЛАДКА - "+"Отладка включена"); + Ожидаем.Что(Сообщения2, "Сообщения2").ИмеетДлину(3); +КонецПроцедуры + +Процедура Тест_ДолженПроверитьНастройкуРазныхУровнейУРазныхСпособовВывода_ОтладкаЗатемИнформация() Экспорт + Лог = Логирование.ПолучитьЛог("testlog"); + Лог.УстановитьУровень(УровниЛога.Информация); + + ПутьФайла = ОбъединитьПути(ПутьКТестам(), "fixtures", "appender-debug.os"); + ПервыйСпособВывода = ЗагрузитьСценарий(ПутьФайла); + ВторойСпособВывода = ЗагрузитьСценарий(ПутьФайла); + + Лог.ДобавитьСпособВывода(ПервыйСпособВывода, УровниЛога.Отладка); + Ожидаем.Что(Лог.УровеньСпособаВывода(ПервыйСпособВывода), "УровеньСпособаВывода(ПервыйСпособВывода)").Равно(УровниЛога.Отладка); + + Лог.ДобавитьСпособВывода(ВторойСпособВывода, УровниЛога.Информация); + Ожидаем.Что(Лог.УровеньСпособаВывода(ВторойСпособВывода), "УровеньСпособаВывода(ВторойСпособВывода)").Равно(УровниЛога.Информация); + + Лог.Информация("Привет"); + Лог.Предупреждение("Внимание"); + Лог.Отладка("Отладка включена"); + + Сообщения1 = ПервыйСпособВывода.ПолучитьСообщения(); + Ожидаем.Что(Сообщения1[0], "ПервыйСпособВывода 0").Равно("ИНФОРМАЦИЯ - "+"Привет"); + Ожидаем.Что(Сообщения1[1], "ПервыйСпособВывода 1").Равно("ПРЕДУПРЕЖДЕНИЕ - "+"Внимание"); + Ожидаем.Что(Сообщения1[2], "ПервыйСпособВывода 2").Равно("ОТЛАДКА - "+"Отладка включена"); + Ожидаем.Что(Сообщения1, "Сообщения1").ИмеетДлину(3); + + Сообщения2 = ВторойСпособВывода.ПолучитьСообщения(); + Ожидаем.Что(Сообщения2[0], "ВторойСпособВывода 0").Равно("ИНФОРМАЦИЯ - "+"Привет"); + Ожидаем.Что(Сообщения2[1], "ВторойСпособВывода 1").Равно("ПРЕДУПРЕЖДЕНИЕ - "+"Внимание"); + Ожидаем.Что(Сообщения2, "Сообщения2").ИмеетДлину(2); +КонецПроцедуры + Процедура Тест_ДолженПроверитьСменуУровняСпособаВыводаПриПереустановкеУровняЛога() Экспорт Лог = Логирование.ПолучитьЛог("testlog"); Лог.УстановитьУровень(УровниЛога.Информация); - + ДобавитьСебяКакОбработчикаВывода(); - + Ожидаем.Что(Лог.УровеньСпособаВывода(ЭтотОбъект), "УровеньСпособаВывода(ЭтотОбъект)").Равно(УровниЛога.Информация); - + Лог.УстановитьУровень(УровниЛога.Отладка); - + Лог.Информация("Привет"); Лог.Предупреждение("Внимание"); Лог.Отладка("Отладка включена"); - + Ожидаем.Что(мСообщенияЛога).ИмеетДлину(3); Ожидаем.Что(мСообщенияЛога[0], "мСообщенияЛога[0]").Равно("ИНФОРМАЦИЯ - [testlog] - " + "Привет"); Ожидаем.Что(мСообщенияЛога[1], "мСообщенияЛога[1]").Равно("ПРЕДУПРЕЖДЕНИЕ - [testlog] - " + "Внимание"); @@ -439,17 +499,17 @@ Процедура Тест_ДолженПроверитьДобавлениеИмениЛогаДляУровняОтладка() Экспорт Лог = Логирование.ПолучитьЛог("testlog"); Лог.УстановитьУровень(УровниЛога.Информация); - + ДобавитьСебяКакОбработчикаВывода(); - + Ожидаем.Что(Лог.УровеньСпособаВывода(ЭтотОбъект), "УровеньСпособаВывода(ЭтотОбъект)").Равно(УровниЛога.Информация); - + Лог.Информация("Привет"); - + Лог.УстановитьУровень(УровниЛога.Отладка); - + Лог.Информация("Привет2"); - + Ожидаем.Что(мСообщенияЛога).ИмеетДлину(2); Ожидаем.Что(мСообщенияЛога[0], "мСообщенияЛога[0]").Равно("ИНФОРМАЦИЯ - " + "Привет"); Ожидаем.Что(мСообщенияЛога[1], "мСообщенияЛога[1]").Равно("ИНФОРМАЦИЯ - [testlog] - " + "Привет2"); @@ -459,24 +519,24 @@ Процедура Тест_ДолженПроверитьОтсутствиеСменыЯвноЗаданногоУровняСпособаВыводаПриПереустановкеУровняЛога() Экспорт Лог = Логирование.ПолучитьЛог("testlog"); Лог.УстановитьУровень(УровниЛога.Информация); - + ДобавитьСебяКакОбработчикаВывода(УровниЛога.Информация); - + Ожидаем.Что(Лог.УровеньСпособаВывода(ЭтотОбъект), "УровеньСпособаВывода(ЭтотОбъект)").Равно(УровниЛога.Информация); - + Лог.УстановитьУровень(УровниЛога.Отладка); - + Лог.Информация("Привет"); Лог.Предупреждение("Внимание"); Лог.Отладка("Отладка включена"); - + Ожидаем.Что(мСообщенияЛога).ИмеетДлину(2); Ожидаем.Что(мСообщенияЛога[0], "мСообщенияЛога[0]").Равно("ИНФОРМАЦИЯ - [testlog] - " + "Привет"); Ожидаем.Что(мСообщенияЛога[1], "мСообщенияЛога[1]").Равно("ПРЕДУПРЕЖДЕНИЕ - [testlog] - " + "Внимание"); КонецПроцедуры Процедура Тест_ДолженПроверитьСокращениеИмениЛогаПриВыводеСообщения() Экспорт - + мСообщенияЛога = Новый Массив; ИменаЛогов = Новый Соответствие; @@ -488,34 +548,34 @@ ИменаЛогов.Вставить("oscript.lib.fake.very.very.very.very.very.very.very.very.long.path", "o.l.f.v.v.v.v.v.v.v.v.l.~h"); ИменаЛогов.Вставить("oscript.lib.fake.longpathinonenode", "o.l.f.~pathinonenode"); ИменаЛогов.Вставить("oscript.lib.fake.veryveryveryverylongpathinonenode", "o.l.f.~pathinonenode"); - + сч = 0; Для Каждого ДанныеЛога Из ИменаЛогов Цикл - + // given Лог = Логирование.ПолучитьЛог(ДанныеЛога.Ключ); Лог.УстановитьУровень(УровниЛога.Отладка); - + Лог.ДобавитьСпособВывода(ЭтотОбъект, УровниЛога.Отладка); - + // when Лог.Отладка("Привет"); - + // then Ожидаем.Что(мСообщенияЛога).ИмеетДлину(сч + 1); ОжидаемаяСтрока = СтрШаблон("ОТЛАДКА - [%1] - Привет", ДанныеЛога.Значение); Ожидаем.Что(мСообщенияЛога[сч], СтрШаблон("мСообщенияЛога[%1]", сч)).Равно(ОжидаемаяСтрока); - + сч = сч + 1; - + КонецЦикла; - + Ожидаем.Что(мСообщенияЛога).ИмеетДлину(ИменаЛогов.Количество()); - + // Закрытие логов Для Каждого ДанныеЛога Из ИменаЛогов Цикл Лог = Логирование.ПолучитьЛог(ДанныеЛога.Ключ); - + Лог.УдалитьСпособВывода(ЭтотОбъект); Логирование.ЗакрытьЛог(Лог); КонецЦикла; @@ -523,7 +583,7 @@ КонецПроцедуры Процедура Тест_ДолженПроверитьРаботуПередачуДополнительныхПолей() Экспорт - + Лог = Логирование.ПолучитьЛог("testlog"); Лог.УстановитьУровень(УровниЛога.Информация); ДобавитьСебяКакОбработчикаВывода(УровниЛога.Информация); @@ -534,9 +594,9 @@ ПолеДатаВремя = ТекущаяДата(); Лог.Поля("ДатаВремя", ПолеДатаВремя, "ПростоПоле", "ПростоПоле").Информация("Привет"); - + Лог.ПоляИз(Новый Структура("ДопПоле, ДопПоле2", "ДопПоле", "ДопПоле2")).Информация("Еще одно сообщение"); - + МассивСобытий = РаскладкаСПолями.мМассивСобытий; Ожидаем.Что(мСообщенияЛога).ИмеетДлину(2); @@ -550,7 +610,7 @@ КонецПроцедуры Процедура Тест_ДолженПроверитьРаботуПередачуВложенныхДополнительныхПолей() Экспорт - + Лог = Логирование.ПолучитьЛог("testlog"); Лог.УстановитьУровень(УровниЛога.Информация); ДобавитьСебяКакОбработчикаВывода(УровниЛога.Информация); @@ -559,7 +619,7 @@ Лог.УстановитьРаскладку(РаскладкаСПолями); ПолеДатаВремя = ТекущаяДата(); - + ЛоггерСПолями = Лог.ПоляИз(Новый Структура("ДопПоле, ДопПоле2", "ДопПоле", "ДопПоле2")); ЛоггерСПолями.Поля("ДатаВремя", ПолеДатаВремя, "ПростоПоле", "ПростоПоле").Информация("Привет"); @@ -573,13 +633,13 @@ Ожидаем.Что(МассивСобытий[0].ПолучитьДополнительныеПоля().Получить("ПростоПоле"), "МассивСобытий[0].ПолучитьДополнительныеПоля().Получить(""ПростоПоле"")").Равно("ПростоПоле"); Ожидаем.Что(МассивСобытий[0].ПолучитьДополнительныеПоля().Получить("ДопПоле"), "МассивСобытий[0].ПолучитьДополнительныеПоля().Получить(""ДопПоле"")").Равно("ДопПоле"); Ожидаем.Что(МассивСобытий[0].ПолучитьДополнительныеПоля().Получить("ДопПоле2"), "МассивСобытий[0].ПолучитьДополнительныеПоля().Получить(""ДопПоле2"")").Равно("ДопПоле2"); - + Ожидаем.Что(мСообщенияЛога[0], "мСообщенияЛога[0]").Равно(БазоваяСтрока); КонецПроцедуры Процедура Тест_ДолженПроверитьПолучениеСпискаЛоговПоФильтру() Экспорт - + Логирование.ПолучитьЛог("oscript.lib.arch"); Логирование.ПолучитьЛог("oscript.lib.arch.core"); Логирование.ПолучитьЛог("oscript.lib.arch.parse"); @@ -588,7 +648,7 @@ МассивЛогов = Логирование.СписокСозданныхЛогов("oscript.lib.arch"); Ожидаем.Что(МассивЛогов).ИмеетДлину(4); - + КонецПроцедуры Процедура Тест_ДолженПроверитьРаботуРаскладкиСAPIv1() Экспорт @@ -597,12 +657,12 @@ РаскладкаAPIv1 = ЗагрузитьСценарий(ОбъединитьПути(ПутьКТестам(), "fixtures", "v1-layout.os")); Лог.УстановитьРаскладку(РаскладкаAPIv1); - + ДобавитьСебяКакОбработчикаВывода(УровниЛога.Информация); - + Лог.Информация("Привет"); Лог.Предупреждение("Внимание"); - + Ожидаем.Что(мСообщенияЛога).ИмеетДлину(2); Ожидаем.Что(мСообщенияЛога[0], "мСообщенияЛога[0]").Равно("ИНФОРМАЦИЯ - " + "Привет"); Ожидаем.Что(мСообщенияЛога[1], "мСообщенияЛога[1]").Равно("ПРЕДУПРЕЖДЕНИЕ - " + "Внимание"); @@ -621,7 +681,7 @@ ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); Возврат ПутьКТестам; КонецФункции - + //////////////////////////// // Методы аппендера