Skip to content

Commit

Permalink
Merge pull request #41 from oscript-library/develop
Browse files Browse the repository at this point in the history
Подготовка релиза 1.4.0 - аппендеры могут указывать более низкий уровень, чем основной лог - фоновое формирование логов, например, отладочных
  • Loading branch information
artbear authored Mar 29, 2022
2 parents 25294d3 + 2f31c04 commit 1ebd957
Show file tree
Hide file tree
Showing 5 changed files with 219 additions and 108 deletions.
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

Описание.Имя("logos")
.Версия("1.3.0")
.Версия("1.4.0")
.ЗависитОт("asserts", "0.4.0")
.ВключитьФайл("src")
.ВключитьФайл("tests")
Expand Down
12 changes: 6 additions & 6 deletions src/file-appender.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@
//
//////////////////////////////////////////////////////////////////////////

Перем мФайлЛога;
Перем ФайлЛога;

Процедура ОткрытьФайл(Знач Путь, Знач Кодировка = "utf-8", Знач Добавлять = Истина) Экспорт
мФайлЛога = Новый ЗаписьТекста(Путь, Кодировка,,Добавлять);
ФайлЛога = Новый ЗаписьТекста(Путь, Кодировка,,Добавлять);
КонецПроцедуры

Процедура Вывести(Знач Сообщение, Знач УровеньСообщения) Экспорт
ПроверитьИнициализацию();
мФайлЛога.ЗаписатьСтроку(Сообщение);
ФайлЛога.ЗаписатьСтроку(Сообщение);
КонецПроцедуры

Процедура Закрыть() Экспорт
ПроверитьИнициализацию();
мФайлЛога.Закрыть();
мФайлЛога = Неопределено;
ФайлЛога.Закрыть();
ФайлЛога = Неопределено;
КонецПроцедуры

// Устанавливает свойство аппендера, заданное в конфигурационном файле
Expand All @@ -30,7 +30,7 @@
КонецПроцедуры // УстановитьСвойство()

Процедура ПроверитьИнициализацию()
Если мФайлЛога = Неопределено Тогда
Если ФайлЛога = Неопределено Тогда
ВызватьИсключение "Не открыт файл лога";
КонецЕсли;
КонецПроцедуры
26 changes: 17 additions & 9 deletions src/levels.os
Original file line number Diff line number Diff line change
Expand Up @@ -15,38 +15,46 @@
Возврат мНаименованиеУровней[Уровень];
КонецФункции

// Вернуть все возможнные уровни
//
// Возвращаемое значение:
// ФиксированнаяСтруктура - результат
// * Ключ - Строка - имя уровня, Отладка, Информация и т.п.
// * Ключ - Число - показатель уровня. У Отладка 0 (мин), у Отключить 5 (макс)
//
Функция Уровни() Экспорт
Возврат Новый ФиксированнаяСтруктура(мУровниПриоритета);
КонецФункции

//////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ
//

Процедура Инициализация()

ИнициализироватьУровни();
ИнициализироватьНаименованияУровней();

КонецПроцедуры

Процедура ИнициализироватьУровни()

мУровниПриоритета = Новый Структура;
мУровниПриоритета.Вставить("Отладка" , 0);
мУровниПриоритета.Вставить("Информация" , 1);
мУровниПриоритета.Вставить("Предупреждение" , 2);
мУровниПриоритета.Вставить("Ошибка" , 3);
мУровниПриоритета.Вставить("КритичнаяОшибка", 4);
мУровниПриоритета.Вставить("Отключить" , 5);

мТекущийУровень = мУровниПриоритета.Информация;


Для Каждого КлючИЗначение Из мУровниПриоритета Цикл
ЭтотОбъект[КлючИЗначение.Ключ] = КлючИЗначение.Значение;
КонецЦикла;

КонецПроцедуры

Процедура ИнициализироватьНаименованияУровней()

мНаименованиеУровней = Новый Соответствие;
мНаименованиеУровней.Вставить(мУровниПриоритета.Отладка , "ОТЛАДКА");
мНаименованиеУровней.Вставить(мУровниПриоритета.Информация , "ИНФОРМАЦИЯ");
Expand All @@ -57,4 +65,4 @@

КонецПроцедуры

Инициализация();
Инициализация();
103 changes: 73 additions & 30 deletions src/log.os
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
Перем мСпособыВывода;
Перем мСпособВыводаЗаданВручную;
Перем мУровниАппендеров;
Перем НастройкаВыводаСообщений;

Перем мИдентификатор;
Перем мРаскладкаСообщения;
Expand All @@ -24,15 +25,15 @@
Возврат мТекущийУровень;
КонецФункции

Функция Поля(Поле1 = Неопределено, ЗначениеПоля1 = Неопределено,
Функция Поля(Поле1 = Неопределено, ЗначениеПоля1 = Неопределено,
Поле2 = Неопределено, ЗначениеПоля2 = Неопределено,
Поле3 = Неопределено, ЗначениеПоля3 = Неопределено,
Поле4 = Неопределено, ЗначениеПоля4 = Неопределено
) Экспорт


НаборПолей = Новый Соответствие();

Если НЕ Поле1 = Неопределено Тогда
НаборПолей.Вставить(Поле1, ЗначениеПоля1);
КонецЕсли;
Expand All @@ -45,29 +46,29 @@
Если НЕ Поле4 = Неопределено Тогда
НаборПолей.Вставить(Поле4, ЗначениеПоля4);
КонецЕсли;

Возврат ПоляИз(НаборПолей);

КонецФункции

Функция ПоляИз(Знач НаборПолей, Знач КлючиИсключения = "") Экспорт

ЛогСПолями = Новый Лог(мИмяЛога);
ЛогСПолями.УстановитьРаскладку(мРаскладкаСообщения);
ЛогСПолями.УстановитьУровень(мТекущийУровень);

Если мСпособВыводаЗаданВручную Тогда
Для каждого СпособВыбора Из мСпособыВывода Цикл

ЛогСПолями.ДобавитьСпособВывода(СпособВыбора, мУровниАппендеров[СпособВыбора].Уровень);

КонецЦикла;
КонецЕсли;

ДополнительныеПоля = Новый Соответствие();

Если мДополнительныеПоляЛога.Количество() > 0 Тогда

Для каждого ПолеРодителя Из мДополнительныеПоляЛога Цикл
ДополнительныеПоля.Вставить(ПолеРодителя.Ключ, ПолеРодителя.Значение);
КонецЦикла;
Expand All @@ -77,8 +78,8 @@
МассивКлючейИсключения = ПолучитьМассивКлючейИсключения(КлючиИсключения);

Для каждого ПолеНабора Из НаборПолей Цикл
Если МассивКлючейИсключения.Количество() > 0

Если МассивКлючейИсключения.Количество() > 0
И Не МассивКлючейИсключения.Найти(ПолеНабора.Ключ) = Неопределено Тогда
Продолжить;
КонецЕсли;
Expand All @@ -95,15 +96,15 @@
КонецФункции

Функция ПолучитьМассивКлючейИсключения(Знач КлючиИсключения)

МассивКлючей = Новый Массив();

Если Не ЗначениеЗаполнено(КлючиИсключения) Тогда
Возврат МассивКлючей;
КонецЕсли;

МассивКлючейИсключения = СтрРазделить(КлючиИсключения, ",");

Для каждого ЭлементМассива Из МассивКлючейИсключения Цикл
МассивКлючей.Добавить(СокрЛП(ЭлементМассива));
КонецЦикла;
Expand All @@ -117,22 +118,31 @@
КонецПроцедуры

Процедура УстановитьУровень(Знач Уровень) Экспорт
Если Уровень < 0 или Уровень > УровниЛога.Отключить Тогда
Если Уровень < 0 Или Уровень > УровниЛога.Отключить Тогда
ВызватьИсключение "Неверное значение аргумента 'Уровень'";
КонецЕсли;

мТекущийУровень = Уровень;

МинимальныйУровень = Уровень;

Если ЗначениеЗаполнено(мУровниАппендеров) Тогда
Для каждого КлючЗначение Из мУровниАппендеров Цикл
СпособВывода = КлючЗначение.Ключ;
НастройкаСпособаВывода = КлючЗначение.Значение;
Если Не НастройкаСпособаВывода.ЗаданЯвно Тогда
НастройкаСпособаВывода.Уровень = Уровень;
КонецЕсли;

Если НастройкаСпособаВывода.Уровень < Уровень Тогда
МинимальныйУровень = НастройкаСпособаВывода.Уровень;
КонецЕсли;
КонецЦикла;

КонецЕсли;

ЗаполнитьНастройкуВыводаСообщений(МинимальныйУровень);

Для каждого ВложенныйЛог Из мВложенныеЛоги Цикл
ВложенныйЛог.УстановитьУровень(Уровень);
КонецЦикла;
Expand Down Expand Up @@ -162,7 +172,7 @@

КонецПроцедуры

// Возвращает признак ручного/собственного задания способа вывода
// Возвращает признак ручного/собственного задания способа вывода
//
// Возвращаемое значение:
// Булево - Истина, если добавляли свои способы вывода, и Ложь, если не добавляли
Expand All @@ -183,11 +193,13 @@
Если НовыйУровеньСпособаВывода <> Неопределено Тогда
НовыйУровень = НовыйУровеньСпособаВывода;
ЗаданЯвно = Истина;

УточнитьНастройкуВыводаСообщенийДляНовогоУровня(НовыйУровень);
Иначе
НовыйУровень = Уровень();
ЗаданЯвно = Ложь;
КонецЕсли;

НастройкаСпособаВывода = НоваяНастройкаСпособаВывода(НовыйУровень, ЗаданЯвно);
мУровниАппендеров[СпособВывода] = НастройкаСпособаВывода;

Expand All @@ -202,7 +214,7 @@
Процедура ПроверитьПоддержкуAPIВывести(СпособВывода, НастройкаСпособаВывода)
Рефлектор = Новый Рефлектор;
Методы = Рефлектор.ПолучитьТаблицуМетодов(СпособВывода);

МетодВывестиСобытие = Методы.Найти("ВывестиСобытие");
Если МетодВывестиСобытие <> Неопределено Тогда
НастройкаСпособаВывода.ВерсияAPI = 3;
Expand All @@ -223,7 +235,7 @@

Процедура ОпределитьВерсиюAPIРаскладкиСообщения()
мВерсияAPIРаскладкиСообщения = 1;

Рефлектор = Новый Рефлектор;
Методы = Рефлектор.ПолучитьТаблицуМетодов(мРаскладкаСообщения);
МетодПолучитьФорматированноеСообщение = Методы.Найти("ПолучитьФорматированноеСообщение");
Expand Down Expand Up @@ -312,34 +324,36 @@
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт

Если УровеньСообщения < Уровень() Тогда
ВыводитьСообщение = НастройкаВыводаСообщений[УровеньСообщения];

Если Не ВыводитьСообщение Тогда
Возврат;
КонецЕсли;

Если ЕстьЗаполненныеПараметры(Параметр1, Параметр2, Параметр3,
Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9) Тогда

Сообщение = СтрШаблон(Сообщение, Параметр1,
Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9);
КонецЕсли;

СтроительСобытияЛога = Новый СтроительСобытияЛога;
СтроительСобытияЛога.УстановитьИмяЛога(мИмяЛога);
СтроительСобытияЛога.УстановитьУровень(УровеньСообщения);
СтроительСобытияЛога.УстановитьУровеньЛога(Уровень());
СтроительСобытияЛога.УстановитьСообщение(Сообщение);
СтроительСобытияЛога.УстановитьВремяСобытия(ТекущаяУниверсальнаяДатаВМиллисекундах());
СтроительСобытияЛога.УстановитьДополнительныеПоля(мДополнительныеПоляЛога);

СобытиеЛога = СтроительСобытияЛога.Создать();

Если мВерсияAPIРаскладкиСообщения = 2 Тогда
ВыводимоеСообщение = мРаскладкаСообщения.ПолучитьФорматированноеСообщение(СобытиеЛога);
Иначе
ВыводимоеСообщение = мРаскладкаСообщения.Форматировать(СобытиеЛога.ПолучитьУровень(), СобытиеЛога.ПолучитьСообщение());
КонецЕсли;
СобытиеЛога.УстановитьФорматированноеСообщение(ВыводимоеСообщение);

Для Каждого СпособВывода Из мСпособыВывода Цикл
НастройкаАппендера = мУровниАппендеров[СпособВывода];
УровеньСпособаВывода = НастройкаАппендера.Уровень;
Expand Down Expand Up @@ -379,24 +393,25 @@
ИначеЕсли НЕ Параметр9 = Неопределено Тогда
Возврат Истина;
КонецЕсли;

Возврат Ложь;

КонецФункции

Процедура Инициализация()

мВложенныеЛоги = Новый Массив();
мИдентификатор = Новый УникальныйИдентификатор;
мДополнительныеПоляЛога = Новый Соответствие();
НастройкаВыводаСообщений = НоваяНастройкаВыводаСообщений();

УстановитьУровень(УровниЛога.Информация);
ИнициализироватьСпособыВывода();

КонецПроцедуры

Процедура ИнициализироватьСпособыВывода()

УстановитьРаскладку(Новый ОсновнаяРаскладкаСообщения);

мСпособВыводаЗаданВручную = Ложь;
Expand All @@ -409,11 +424,39 @@
мУровниАппендеров[ВыводПоУмолчанию] = НастройкаСпособаВывода;

ПроверитьПоддержкуAPIВывести(ВыводПоУмолчанию, НастройкаСпособаВывода);


КонецПроцедуры

Функция НоваяНастройкаВыводаСообщений()
Уровни = УровниЛога.Уровни();
Результат = Новый Массив(Уровни.Количество());
Для каждого КлючЗначение Из Уровни Цикл
Результат[КлючЗначение.Значение] = Ложь;
КонецЦикла;
Возврат Результат;
КонецФункции

Процедура ЗаполнитьНастройкуВыводаСообщений(Знач МинимальныйУровень)
Для УровеньФильтра = 0 По НастройкаВыводаСообщений.ВГраница() Цикл
РазрешенВыводСообщений = УровеньФильтра >= МинимальныйУровень;
НастройкаВыводаСообщений[УровеньФильтра] = РазрешенВыводСообщений;
КонецЦикла;
КонецПроцедуры

Процедура УточнитьНастройкуВыводаСообщенийДляНовогоУровня(Знач НовыйУровень)
Для УровеньФильтра = 0 По НастройкаВыводаСообщений.ВГраница() Цикл
Если НовыйУровень <= УровеньФильтра Тогда
РазрешенВыводСообщений = Истина;
Иначе
РазрешенВыводСообщений = НастройкаВыводаСообщений[УровеньФильтра];
КонецЕсли;
НастройкаВыводаСообщений[УровеньФильтра] = РазрешенВыводСообщений;
КонецЦикла;

КонецПроцедуры

Функция НоваяНастройкаСпособаВывода(Знач НовыйУровень, Знач ЗаданЯвно)

НастройкаСпособаВывода = Новый Структура("Уровень, ЗаданЯвно, ВерсияAPI", НовыйУровень, ЗаданЯвно, Неопределено);
Возврат НастройкаСпособаВывода;

Expand Down
Loading

0 comments on commit 1ebd957

Please sign in to comment.