From a68ecf5856bd2bc8ff259cd85ccfff8a5fef69b1 Mon Sep 17 00:00:00 2001
From: Saveliy Savenak <56991906+Lisoveliy@users.noreply.github.com>
Date: Fri, 14 Jun 2024 23:54:52 +0300
Subject: [PATCH] Update logger.md

---
 docs/ru/interfaces/logger.md | 61 +++++++++++++++++++++++++++++++++++-
 1 file changed, 60 insertions(+), 1 deletion(-)

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 @@
 <img src="https://github.com/Lisoveliy/SVET/blob/master/docs/LoggerIOArch.drawio.svg?raw=true" alt="Logger IO Arch"/>
 </p>
 
-Можно заметить что все сервисы внутри ядра 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> svet;
+    Logger *logger;
+    void setup()
+    {
+      auto builder = SVETBuilder::Setup()->SetLogger(LoggerOptions()); //Установка параметров логгера
+      svet = std::make_unique<SVET>(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``` существует до конца выполнения программы).