https://github.com/autumn-library/autumn-logos
Компонент ОСени, для внедрения логгера.
https://github.com/autumn-library/autumn-logos
autumn hacktoberfest oscript
Last synced: 4 months ago
JSON representation
Компонент ОСени, для внедрения логгера.
- Host: GitHub
- URL: https://github.com/autumn-library/autumn-logos
- Owner: autumn-library
- Created: 2023-01-08T00:11:29.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2026-01-27T19:45:26.000Z (5 months ago)
- Last Synced: 2026-01-28T06:53:17.204Z (5 months ago)
- Topics: autumn, hacktoberfest, oscript
- Language: 1C Enterprise
- Homepage: https://autumn-library.github.io/autumn-logos
- Size: 83 KB
- Stars: 6
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# autumn-logos - Компонент ОСени, для внедрения логгера.
[](https://litrosbadges.ru/package/autumn-logos)
Компонент [ОСени](https://github.com/nixel2007/autumn), для внедрения [логгера](https://github.com/oscript-library/logos). Удобная аннотация - обертка для получения объекта логгера.
## Подключение
```bsl
#Использовать autumn
#Использовать autumn-logos
// теперь вам доступны логгеры
```
## Использование.
Допустим у вас есть ```Желудь```. В его поле вы можете внедрить класс ```Лог``` из библиотеки [logos](https://github.com/oscript-library/logos). Внедрение осуществляется по всем правилам ```Пластелина```
Для внедрения используется аннотация ```&Лог("Префикс.библиотеки")```. Аннотация имеет один параметр, содержащий префикс. Допускается также использование аннотации без параметра.
Результатом внедрения будет объект типа ```Лог```. Общая логика такая:
```Лог = Логирование.ПолучитьЛог(ПереданныйПрефикс + "." + ИмяКлассаВКоторыйВнедряетсяЛог)```
У аннотации ```Лог``` есть второй параметр, который отключает добавление имени класса в конце. И аннотация имеет вид ```&Лог(Значение = "Префикс.библиотеки", УчитыватьИмяКласса = Ложь)```.
```bsl
&Лог(Значение = "my.logger.DEBUG", УчитыватьИмяКласса = Ложь)
Перем ЛогБезИмениКлассаСДебагом;
```
## Пример:
```Файл: МойКласс.os```
```bsl
&Лог(Значение = "Префикс.Лог.БезИмениКласса", УчитыватьИмяКласса = Ложь)
Перем ЛогБезИмениКласса;
&Лог("Префикс.Лог.ВЭкспортромПоле")
Перем ЭкспортныйЛог Экспорт;
&Лог // лог без префикса
Перем ЛогБезПрефикса Экспорт;
Перем _ПриватныйЛог;
Перем ЛогСеттером;
&Желудь
Процедура ПриСозданииОбъекта(
&Лог("Префикс.Лог.ВКонструкторе") ЛогВКонструкторе
)
_ПриватныйЛог = ЛогВКонструкторе;
КонецПроцедуры
Функция ПриватныйЛог() Экспорт
Возврат _ПриватныйЛог;
КонецФункции
&Лог("Префикс.Лог.ВСеттере")
Процедура УстановитьЛогСеттером(Значение) Экспорт
ЛогСеттером = Значение;
КонецПроцедуры
Функция ПолучитьЛогСеттером() Экспорт
Возврат ЛогСеттером;
КонецФункции
```
## Конфигурирование
Настройка логов осуществляется через файл ```autumn-properties.json``` или ```autumn-properties.yaml```. Структура настроек очень близка к оригинальной библиотеке [logos](https://github.com/oscript-library/logos).
```json
{
"logos": {
"logger": { // Описание уровней логов, и ссылки на применяемые аппендеры.
"rootLogger": {"level":"WARN"},
"my.logger.DEBUG": "DEBUG", // Уровень можно задать как строкой, так и объектом с ключем level
"my.logger.INFO": "INFO",
"my.logger.WARN": {"level":"WARN"},
"my.logger.stringlayout": {"level":"INFO", "stringlayout":"%ДатаВремя%:%Уровень% - %Сообщение%"},
"my.logger.classlayout": {"level":"INFO", "classlayout":"МойКлассРаскладки"},
"my.logger.standartlayout": {"level":"INFO", "classlayout":"ОсновнаяРаскладкаСообщения"},
"my.logger.jsonlayout": {"level":"INFO", "classlayout":"JSONРаскладкаСообщения"},
"my.logger.ERROR": {"level":"ERROR"},
"my.logger.CRITICALERROR": {"level":"CRITICALERROR"},
"my.logger.DISABLE": {"level":"DISABLE"},
"my.logger.DEFAULT": {"level":"DEFAULT"},
"my.logger.fileappender": {"level":"DEBUG", "appenders": ["debugfile", "consoledebug"]}, // Аппендеры можно задать массиом
"my.logger.consoleappender": {"level":"INFO", "appenders": "debugfile, consoledebug"} // Или строкой через ","
},
"appender": { // Настройки аппендеров
"debugfile": {
"type": "ВыводЛогаВФайл",
"level": "DEBUG",
"file": "tests/log/fileappender.log"
},
"consoledebug": {
"type": "ВыводЛогаВКонсоль",
"level": "DEBUG"
}
}
}
}
```
### Наследование настроек аппендеров
Настройки кастомных аппендеров наследуются вложенными логгерами по иерархии имён через точку. Например, если настроен логгер `my.logger.smartappender` с кастомным аппендером, то логгер `my.logger.smartappender.child` автоматически унаследует эти настройки аппендера.
```json
{
"logos": {
"logger": {
"my.logger.smartappender": {"level":"INFO", "appenders": "myAppender"}
},
"appender": {
"myAppender": {
"type": "МойАппендер",
"level": "DEBUG"
}
}
}
}
```
```bsl
// Логгер "my.logger.smartappender.child" унаследует аппендер "myAppender"
&Лог("my.logger.smartappender.child")
Перем Лог;
```
Можно задать раскладку одним из двух способов. Ключем ```stringlayout``` где можно задать строку для раскладки по APIv1. Допустимые переменные ```%ДатаВремя%```, ```%Уровень%```, ```%Сообщение%"```. Или указать имя класса, который является желудем в контексте Поделки, и отвечает требованиям APIv2. Пример:
```bsl
&Желудь
&Прозвище("РаскладкаЛогоса")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Функция ПолучитьФорматированноеСообщение(Знач СобытиеЛога) Экспорт
ФорматированноеСообщение = СобытиеЛога.ПолучитьСообщение();
Возврат ФорматированноеСообщение;
КонецФункции
```
## Применение для конфигурирования.
Так же можно применять библиотеку для конфигурирования логов, но без внедрения непосредственно через пластилин.
```bsl
#Использовать autumn
#Использовать autumn-logos
// Инициализация контекста осени. В этот момент будут произведены настройки логов из файла autumn-properties.json или autumn-properties.yaml
Поделка = Новый Поделка();
// Получение настроенного лога.
ЛогОтладка = Логирование.ПолучитьЛог("my.logger.DEBUG");
```
## Трюк с мета-аннотациями.
Допустим, я не хочу в каждой аннотации писать имя лога. Тем более, если он одинаковый. Тогда можно сделать аннотацию, которая будет это делать за вас. Вот пример такой аннотации.
```bsl
&Аннотация("ЛогМоейЛибы")
&Лог("oscript.lib.myliba")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
```
И теперь в любом классе можно инжектить уже своей аннотацией.
```bsl
&ЛогМоейЛибы
Перем ЛогЧерезАннотацию;
&Желудь
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура ПолезнаяНагрузка()
ЛогЧерезАннотацию.Информация("Совершили полезное действие");
КонецПроцедуры
```