Update logger.md

This commit is contained in:
Saveliy Savenak 2024-06-14 23:54:52 +03:00 committed by GitHub
parent 654c1b031a
commit a68ecf5856
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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``` существует до конца выполнения программы).