diff --git a/packagedef b/packagedef index f20f0a2..c841fad 100644 --- a/packagedef +++ b/packagedef @@ -1,10 +1,10 @@  Описание.Имя("logos") - .Версия("1.0.2") + .Версия("1.1") .ЗависитОт("asserts", "0.4.0") .ВключитьФайл("src") .ВключитьФайл("tests") .ВключитьФайл("lib.config") - .ВерсияСреды("1.0.17") + .ВерсияСреды("1.0.20") // vim: filetype=onescript diff --git a/src/console-appender.os b/src/console-appender.os index 3de2710..03abcbe 100644 --- a/src/console-appender.os +++ b/src/console-appender.os @@ -4,9 +4,11 @@ // ////////////////////////////////////////////////////////////////////////// -Процедура Вывести(Знач Сообщение) Экспорт +Перем КартаСтатусовИУровней; + +Процедура Вывести(Знач Сообщение, УровеньСообщения) Экспорт - Сообщить(Сообщение); + Сообщить(Сообщение, КартаСтатусовИУровней[УровеньСообщения]); КонецПроцедуры @@ -19,3 +21,10 @@ Процедура УстановитьСвойство(Знач ИмяСвойства, Знач Значение) Экспорт КонецПроцедуры // УстановитьСвойство() + +КартаСтатусовИУровней = Новый Соответствие; +КартаСтатусовИУровней.Вставить(УровниЛога.Отладка, СтатусСообщения.БезСтатуса); +КартаСтатусовИУровней.Вставить(УровниЛога.Информация, СтатусСообщения.Обычное); +КартаСтатусовИУровней.Вставить(УровниЛога.Предупреждение, СтатусСообщения.Внимание); +КартаСтатусовИУровней.Вставить(УровниЛога.Ошибка, СтатусСообщения.Важное); +КартаСтатусовИУровней.Вставить(УровниЛога.КритичнаяОшибка, СтатусСообщения.ОченьВажное); \ No newline at end of file diff --git a/src/file-appender.os b/src/file-appender.os index 201ce5d..8533150 100644 --- a/src/file-appender.os +++ b/src/file-appender.os @@ -10,7 +10,7 @@ мФайлЛога = Новый ЗаписьТекста(Путь, Кодировка,,Добавлять); КонецПроцедуры -Процедура Вывести(Знач Сообщение) Экспорт +Процедура Вывести(Знач Сообщение, Знач УровеньСообщения) Экспорт ПроверитьИнициализацию(); мФайлЛога.ЗаписатьСтроку(Сообщение); КонецПроцедуры diff --git a/src/log.os b/src/log.os index aad29ef..f5ed66b 100644 --- a/src/log.os +++ b/src/log.os @@ -68,12 +68,30 @@ НастройкаСпособаВывода = НоваяНастройкаСпособаВывода(НовыйУровень, ЗаданЯвно); мУровниАппендеров[СпособВывода] = НастройкаСпособаВывода; + ПроверитьПоддержкуAPIВывести(СпособВывода, НастройкаСпособаВывода); + +КонецПроцедуры + +Процедура ПроверитьПоддержкуAPIВывести(СпособВывода, НастройкаСпособаВывода) + Рефлектор = Новый Рефлектор; + Методы = Рефлектор.ПолучитьТаблицуМетодов(СпособВывода); + МетодВывести = Методы.Найти("Вывести"); + Если МетодВывести <> Неопределено Тогда + Если МетодВывести.КоличествоПараметров = 2 Тогда + НастройкаСпособаВывода.ВерсияAPI = 2; + Иначе + Сообщить("Число параметров:" + МетодВывести.КоличествоПараметров); + СпособВывода.Вывести("Метод Вывести должен иметь 2 параметра. + |В будущих версиях logos данный способ вывода перестанет работать."); + КонецЕсли; + КонецЕсли; КонецПроцедуры Процедура УдалитьСпособВывода(Знач СпособВывода) Экспорт Для Сч = 0 По мСпособыВывода.Количество()-1 Цикл Если мСпособыВывода[Сч] = СпособВывода Тогда + мУровниАппендеров.Удалить(СпособВывода); СпособВывода.Закрыть(); мСпособыВывода.Удалить(Сч); Прервать; @@ -155,9 +173,14 @@ Если УровеньСообщения >= Уровень() Тогда ВыводимоеСообщение = мРаскладкаСообщения.Форматировать(УровеньСообщения, Сообщение); Для Каждого СпособВывода Из мСпособыВывода Цикл - УровеньСпособаВывода = мУровниАппендеров[СпособВывода].Уровень; + НастройкаАппендера = мУровниАппендеров[СпособВывода]; + УровеньСпособаВывода = НастройкаАппендера.Уровень; Если УровеньСпособаВывода = Неопределено Или УровеньСообщения >= УровеньСпособаВывода Тогда - СпособВывода.Вывести(ВыводимоеСообщение); + Если НастройкаАппендера.ВерсияAPI = 2 Тогда + СпособВывода.Вывести(ВыводимоеСообщение, УровеньСообщения); + Иначе + СпособВывода.Вывести(ВыводимоеСообщение); + КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; @@ -210,13 +233,14 @@ ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); мСпособыВывода.Добавить(ВыводПоУмолчанию); - мУровниАппендеров[ВыводПоУмолчанию] = НоваяНастройкаСпособаВывода(Уровень(), Ложь); - + НастройкаСпособаВывода = НоваяНастройкаСпособаВывода(Уровень(), Ложь); + мУровниАппендеров[ВыводПоУмолчанию] = НастройкаСпособаВывода; + КонецПроцедуры Функция НоваяНастройкаСпособаВывода(Знач НовыйУровень, Знач ЗаданЯвно) - НастройкаСпособаВывода = Новый Структура("Уровень, ЗаданЯвно", НовыйУровень, ЗаданЯвно); + НастройкаСпособаВывода = Новый Структура("Уровень, ЗаданЯвно, ВерсияAPI", НовыйУровень, ЗаданЯвно, Неопределено); Возврат НастройкаСпособаВывода; КонецФункции diff --git a/tests/fixtures/appender-debug.os b/tests/fixtures/appender-debug.os index f3e8dd9..51907ca 100644 --- a/tests/fixtures/appender-debug.os +++ b/tests/fixtures/appender-debug.os @@ -7,7 +7,7 @@ //////////////////////////// // Методы аппендера -Процедура Вывести(Знач Сообщение) Экспорт +Процедура Вывести(Знач Сообщение, Знач УровеньВывода) Экспорт мСообщенияЛога.Добавить(Сообщение); КонецПроцедуры diff --git a/tests/logos-test.os b/tests/logos-test.os index 767802e..57e3a55 100644 --- a/tests/logos-test.os +++ b/tests/logos-test.os @@ -247,7 +247,7 @@ КонецПроцедуры Процедура ДобавитьСебяКакОбработчикаВывода(Знач НовыйУровень = Неопределено) - + мСообщенияЛога = Новый Массив; Лог.ДобавитьСпособВывода(ЭтотОбъект, НовыйУровень); @@ -467,7 +467,7 @@ //////////////////////////// // Методы аппендера -Процедура Вывести(Знач Сообщение) Экспорт +Процедура Вывести(Знач Сообщение, УровеньСообщения) Экспорт мСообщенияЛога.Добавить(Сообщение); КонецПроцедуры