diff --git a/docs/ru/interfaces/logger.md b/docs/ru/interfaces/logger.md index e029ece..c564bbb 100644 --- a/docs/ru/interfaces/logger.md +++ b/docs/ru/interfaces/logger.md @@ -8,7 +8,7 @@ Logger IO Arch

-Можно заметить что все сервисы внутри ядра SVET передают в логгер информацию для удобства отладки и программирования. Это поведение можно настроить(например отключить логи ядра полностью) при создании класса ```SVET``` с помощью ```SVETBuilder```. Так же, можно заметить что логгер находится за пределами ядра и является интерфейсом взаимодействия с пользователем. Это означает что его можно использовать для своих собственных целей даже если логирование самого ядра отключено. Для этого у класса ```Logger``` есть публичные методы для логирования. +Можно заметить что все сервисы внутри ядра **SVET** передают в логгер информацию для удобства отладки и программирования. Это поведение можно настроить(например отключить логи ядра полностью) при создании класса ```SVET``` с помощью ```SVETBuilder```. Так же, можно заметить что логгер находится за пределами ядра и является интерфейсом взаимодействия с пользователем. Это означает что его можно использовать для своих собственных целей даже если логирование самого ядра отключено. Для этого у класса ```Logger``` есть публичные методы для логирования. ## Публичные методы: @@ -63,3 +63,62 @@ [ERROR] Core: Core changed!!! //Сообщение от ядра [ERROR]: Exception! //Если initiator не передан [ERROR] main.cpp: Hello world! //Если initiator передан и не равен nullptr + +## Создание Logger + +Создание экземпляра ```Logger``` происходит в методе ```SVET::Start``` используя параметры указанные через ```LoggerOptions``` в методе ```SVETBuilder::SetLogger```. Вам обязательно необходимо установить параметры логгирования, в противном случае проект **не будет скомпилирован**. + +### Пример получения Logger + + std::unique_ptr svet; + Logger *logger; + void setup() + { + auto builder = SVETBuilder::Setup()->SetLogger(LoggerOptions()); //Установка параметров логгера + svet = std::make_unique(SVET(builder)); + svet->Start(); + logger = svet->SLogger.get(); + } + +В данном случае будут использованы параметры по умолчанию указанные в конструкторе ```LoggerOptions``` + +### Установка своих параметров + +Конструктор ```LoggerOptions``` принимает в себя следующие параметры: + + MessageType coreLoggerLevel, + MessageType userLoggerLevel, + bool useColor, + short baudRate + +Где + +```coreLoggerLevel``` - указание уровня с которого будет производится логирование сообщений ядра + +```userLoggerLevel``` - указание уровня с которого будет производится логирование сообщений разработчика + +```useColor``` - указание вывода цветных сообщений + +```baudRate``` - указание скорости работы Serial порта + +В свою очередь ```MessageType``` является ```enum``` с следующими значениями: + + INFO, - Вывод сообщений через методы Info, Warn, Error + WARN, - Вывод сообщений через методы Warn, Error + ERROR, - Вывод сообщений только через метод Error + NONE - Отсутствие вывода + +Таким образом можно управлять выводом **SVET** и выводом разработчика в зависимости от ситуации. + +#### Отключение Logger + +Если вам необходимо полностью перехватить работу с классом ```Serial```, вы можете отключить ```Logger``` и использовать ```Serial``` по своему назначению не боясь что кто-то вмешивается в его работу. Для этого необходимо установить параметры ```coreLoggerLevel``` и ```userLoggerLevel``` в значения ```NONE```. В этом случае ```Logger``` не будет выполнять комманду ```Serial.begin()``` и логгировать сообщения поступающие из ядра и от пользователя. + +Пример: + + auto builder = SVETBuilder::Setup()->SetLogger(LoggerOptions(NONE, NONE)); + +### Время жизни Logger +Экземпляр класса ```Logger``` существует внутри обьекта ```SVET``` в качестве поля ```SLogger``` _(SvetLogger или ServiceLogger)_. Вам не нужно создавать ```Logger``` самостоятельно если вы планируете использовать платформу **SVET**. + +```Logger``` является ```Singleton``` сервисом. Это сделано для того чтобы избежать излишнего расходования ресурсов микроконтроллера и не загружать его _"кучу"_. Экземпляр ```SLogger``` существует с момента выхода из метода ```SVET::Start``` до удаления объекта ```SVET``` (по сути при правильном использовании **SVET** можно считать что ```SLogger``` существует до конца выполнения программы).