doc: updated wiki

This commit is contained in:
aZholtikov committed 2026-08-16 08:43:56 +03:00
1 parent c6848f6876
commit da076a19e6
2 files changed
+16 -50

No files matched your search

+8 -25
View File
@@ -24,12 +24,12 @@ The library enables ESP32 devices to send structured log messages to a remote sy
## Features ## Features
- **RFC 5424 Compliance**: Messages are formatted according to the RFC 5424 syslog standard 1. **RFC 5424 Compliance**: Messages are formatted according to the RFC 5424 syslog standard
- **Standard Facility Codes**: Support for all 24 standard syslog facility codes (KERN, USER, DAEMON, LOCAL0-LOCAL7, etc.) 2. **Standard Facility Codes**: Support for all 24 standard syslog facility codes (KERN, USER, DAEMON, LOCAL0-LOCAL7, etc.)
- **Severity Levels**: Support for all 8 standard syslog severity levels (EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG) 3. **Severity Levels**: Support for all 8 standard syslog severity levels (EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG)
- **UDP Transport**: Uses datagram sockets for efficient log transmission 4. **UDP Transport**: Uses datagram sockets for efficient log transmission
- **DMA-Compatible Memory**: Utilizes MALLOC_CAP_8BIT allocations for potential DMA usage 5. **DMA-Compatible Memory**: Utilizes MALLOC_CAP_8BIT allocations for potential DMA usage
- **Structured Logging**: Includes hostname, app name, and message fields per RFC 5424 6. **Structured Logging**: Includes hostname, app name, and message fields per RFC 5424
--- ---
@@ -206,7 +206,6 @@ void app_main(void)
// Initialize configuration with defaults // Initialize configuration with defaults
zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT(); zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
strcpy(config.syslog_ip, "192.168.1.100"); // Set syslog server IP strcpy(config.syslog_ip, "192.168.1.100"); // Set syslog server IP
// Initialize syslog client // Initialize syslog client
esp_err_t ret = zh_syslog_init(&config); esp_err_t ret = zh_syslog_init(&config);
if (ret != ESP_OK) if (ret != ESP_OK)
@@ -214,16 +213,12 @@ void app_main(void)
printf("Syslog initialization failed: %s\n", esp_err_to_name(ret)); printf("Syslog initialization failed: %s\n", esp_err_to_name(ret));
return; return;
} }
// Send informational message // Send informational message
zh_syslog_send(ZH_USER, ZH_INFO, "my_device", "my_app", "Application started"); zh_syslog_send(ZH_USER, ZH_INFO, "my_device", "my_app", "Application started");
// Send warning message // Send warning message
zh_syslog_send(ZH_USER, ZH_WARNING, "my_device", "my_app", "Low battery"); zh_syslog_send(ZH_USER, ZH_WARNING, "my_device", "my_app", "Low battery");
// Send error message // Send error message
zh_syslog_send(ZH_KERN, ZH_ERR, "my_device", "kernel", "Disk read error"); zh_syslog_send(ZH_KERN, ZH_ERR, "my_device", "kernel", "Disk read error");
// Deinitialize when done // Deinitialize when done
zh_syslog_deinit(); zh_syslog_deinit();
} }
@@ -258,31 +253,25 @@ void app_main(void)
esp_netif_init(); esp_netif_init();
esp_event_loop_create_default(); esp_event_loop_create_default();
esp_netif_create_default_wifi_sta(); esp_netif_create_default_wifi_sta();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg); esp_wifi_init(&cfg);
wifi_config_t wifi_config = { wifi_config_t wifi_config = {
.sta = { .sta = {
.ssid = WIFI_SSID, .ssid = WIFI_SSID,
.password = WIFI_PASS, .password = WIFI_PASS,
}, },
}; };
esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(WIFI_IF_STA, &wifi_config); esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, NULL); esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, NULL);
esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL, NULL); esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL, NULL);
esp_wifi_start(); esp_wifi_start();
s_event_group = xEventGroupCreate(); s_event_group = xEventGroupCreate();
xEventGroupWaitBits(s_event_group, WIFI_CONNECTED_BIT, pdFALSE, pdTRUE, portMAX_DELAY); xEventGroupWaitBits(s_event_group, WIFI_CONNECTED_BIT, pdFALSE, pdTRUE, portMAX_DELAY);
// Initialize syslog after Wi-Fi connection // Initialize syslog after Wi-Fi connection
zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT(); zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
strcpy(config.syslog_ip, "192.168.1.100"); strcpy(config.syslog_ip, "192.168.1.100");
zh_syslog_init(&config); zh_syslog_init(&config);
// Send periodic log messages // Send periodic log messages
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
char msg[64]; char msg[64];
@@ -290,7 +279,6 @@ void app_main(void)
zh_syslog_send(ZH_USER, ZH_INFO, "esp32_sensor", "logger", msg); zh_syslog_send(ZH_USER, ZH_INFO, "esp32_sensor", "logger", msg);
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
zh_syslog_deinit(); zh_syslog_deinit();
} }
@@ -316,19 +304,14 @@ void app_main(void)
zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT(); zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
strcpy(config.syslog_ip, "192.168.1.100"); strcpy(config.syslog_ip, "192.168.1.100");
zh_syslog_init(&config); zh_syslog_init(&config);
// Kernel critical error // Kernel critical error
zh_syslog_send(ZH_KERN, ZH_CRIT, "esp32", "kernel", "Out of memory"); zh_syslog_send(ZH_KERN, ZH_CRIT, "esp32", "kernel", "Out of memory");
// User application warning // User application warning
zh_syslog_send(ZH_USER, ZH_WARNING, "esp32", "app", "Sensor reading timeout"); zh_syslog_send(ZH_USER, ZH_WARNING, "esp32", "app", "Sensor reading timeout");
// Auth subsystem notice // Auth subsystem notice
zh_syslog_send(ZH_AUTH, ZH_NOTICE, "esp32", "auth", "User login successful"); zh_syslog_send(ZH_AUTH, ZH_NOTICE, "esp32", "auth", "User login successful");
// Local facility for custom logging // Local facility for custom logging
zh_syslog_send(ZH_LOCAL0, ZH_DEBUG, "esp32", "debugger", "Variable state: 0x1234"); zh_syslog_send(ZH_LOCAL0, ZH_DEBUG, "esp32", "debugger", "Variable state: 0x1234");
zh_syslog_deinit(); zh_syslog_deinit();
} }
``` ```
@@ -401,8 +384,8 @@ limitations under the License.
## Additional Notes ## Additional Notes
- **UDP Reliability**: This library uses UDP which does not guarantee message delivery. For reliable delivery, implement application-level acknowledgment. - **UDP Reliability**: This library uses UDP which does not guarantee message delivery. For reliable delivery, implement application-level acknowledgment
- **Performance**: O(n) for message formatting (n = message length). Send operation is blocking. - **Performance**: O(n) for message formatting (n = message length). Send operation is blocking
- **Best Practices**: - **Best Practices**:
- Always check return values from zh_syslog_init() and zh_syslog_send() - Always check return values from zh_syslog_init() and zh_syslog_send()
- Call zh_syslog_deinit() before application exit or module unload - Call zh_syslog_deinit() before application exit or module unload
+8 -25
View File
@@ -24,12 +24,12 @@
## Возможности ## Возможности
- **Соответствие RFC 5424**: Сообщения форматируются в соответствии со стандартом syslog RFC 5424 1. **Соответствие RFC 5424**: Сообщения форматируются в соответствии со стандартом syslog RFC 5424
- **Стандартные коды Facility**: Поддержка всех 24 стандартных кодов facility syslog (KERN, USER, DAEMON, LOCAL0-LOCAL7 и т.д.) 2. **Стандартные коды Facility**: Поддержка всех 24 стандартных кодов facility syslog (KERN, USER, DAEMON, LOCAL0-LOCAL7 и т.д.)
- **Уровни важности**: Поддержка всех 8 стандартных уровней severity syslog (EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG) 3. **Уровни важности**: Поддержка всех 8 стандартных уровней severity syslog (EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG)
- **UDP транспорт**: Использует дейтаграммные сокеты для эффективной передачи журналов 4. **UDP транспорт**: Использует дейтаграммные сокеты для эффективной передачи журналов
- **Память совместимая с DMA**: Использует выделения MALLOC_CAP_8BIT для потенциального использования DMA 5. **Память совместимая с DMA**: Использует выделения MALLOC_CAP_8BIT для потенциального использования DMA
- **Структурированное логирование**: Включает поля hostname, app name и message в соответствии с RFC 5424 6. **Структурированное логирование**: Включает поля hostname, app name и message в соответствии с RFC 5424
--- ---
@@ -206,7 +206,6 @@ void app_main(void)
// Инициализация конфигурации со значениями по умолчанию // Инициализация конфигурации со значениями по умолчанию
zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT(); zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
strcpy(config.syslog_ip, "192.168.1.100"); // IP syslog сервера strcpy(config.syslog_ip, "192.168.1.100"); // IP syslog сервера
// Инициализация syslog клиента // Инициализация syslog клиента
esp_err_t ret = zh_syslog_init(&config); esp_err_t ret = zh_syslog_init(&config);
if (ret != ESP_OK) if (ret != ESP_OK)
@@ -214,16 +213,12 @@ void app_main(void)
printf("Ошибка инициализации syslog: %s\n", esp_err_to_name(ret)); printf("Ошибка инициализации syslog: %s\n", esp_err_to_name(ret));
return; return;
} }
// Отправка информационного сообщения // Отправка информационного сообщения
zh_syslog_send(ZH_USER, ZH_INFO, "my_device", "my_app", "Приложение запущено"); zh_syslog_send(ZH_USER, ZH_INFO, "my_device", "my_app", "Приложение запущено");
// Отправка предупреждения // Отправка предупреждения
zh_syslog_send(ZH_USER, ZH_WARNING, "my_device", "my_app", "Низкий заряд батареи"); zh_syslog_send(ZH_USER, ZH_WARNING, "my_device", "my_app", "Низкий заряд батареи");
// Отправка сообщения об ошибке // Отправка сообщения об ошибке
zh_syslog_send(ZH_KERN, ZH_ERR, "my_device", "kernel", "Ошибка чтения диска"); zh_syslog_send(ZH_KERN, ZH_ERR, "my_device", "kernel", "Ошибка чтения диска");
// Деинициализация при завершении // Деинициализация при завершении
zh_syslog_deinit(); zh_syslog_deinit();
} }
@@ -258,31 +253,25 @@ void app_main(void)
esp_netif_init(); esp_netif_init();
esp_event_loop_create_default(); esp_event_loop_create_default();
esp_netif_create_default_wifi_sta(); esp_netif_create_default_wifi_sta();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg); esp_wifi_init(&cfg);
wifi_config_t wifi_config = { wifi_config_t wifi_config = {
.sta = { .sta = {
.ssid = WIFI_SSID, .ssid = WIFI_SSID,
.password = WIFI_PASS, .password = WIFI_PASS,
}, },
}; };
esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(WIFI_IF_STA, &wifi_config); esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, NULL); esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, NULL);
esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL, NULL); esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL, NULL);
esp_wifi_start(); esp_wifi_start();
s_event_group = xEventGroupCreate(); s_event_group = xEventGroupCreate();
xEventGroupWaitBits(s_event_group, WIFI_CONNECTED_BIT, pdFALSE, pdTRUE, portMAX_DELAY); xEventGroupWaitBits(s_event_group, WIFI_CONNECTED_BIT, pdFALSE, pdTRUE, portMAX_DELAY);
// Инициализация syslog после подключения Wi-Fi // Инициализация syslog после подключения Wi-Fi
zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT(); zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
strcpy(config.syslog_ip, "192.168.1.100"); strcpy(config.syslog_ip, "192.168.1.100");
zh_syslog_init(&config); zh_syslog_init(&config);
// Периодическая отправка журнальных сообщений // Периодическая отправка журнальных сообщений
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
char msg[64]; char msg[64];
@@ -290,7 +279,6 @@ void app_main(void)
zh_syslog_send(ZH_USER, ZH_INFO, "esp32_sensor", "logger", msg); zh_syslog_send(ZH_USER, ZH_INFO, "esp32_sensor", "logger", msg);
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
zh_syslog_deinit(); zh_syslog_deinit();
} }
@@ -316,19 +304,14 @@ void app_main(void)
zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT(); zh_syslog_init_config_t config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
strcpy(config.syslog_ip, "192.168.1.100"); strcpy(config.syslog_ip, "192.168.1.100");
zh_syslog_init(&config); zh_syslog_init(&config);
// Критическая ошибка ядра // Критическая ошибка ядра
zh_syslog_send(ZH_KERN, ZH_CRIT, "esp32", "kernel", "Недостаточно памяти"); zh_syslog_send(ZH_KERN, ZH_CRIT, "esp32", "kernel", "Недостаточно памяти");
// Предупреждение пользовательского приложения // Предупреждение пользовательского приложения
zh_syslog_send(ZH_USER, ZH_WARNING, "esp32", "app", "Таймаут чтения сенсора"); zh_syslog_send(ZH_USER, ZH_WARNING, "esp32", "app", "Таймаут чтения сенсора");
// Уведомление подсистемы аутентификации // Уведомление подсистемы аутентификации
zh_syslog_send(ZH_AUTH, ZH_NOTICE, "esp32", "auth", "Пользователь успешно вошёл"); zh_syslog_send(ZH_AUTH, ZH_NOTICE, "esp32", "auth", "Пользователь успешно вошёл");
// Локальный facility для пользовательского логирования // Локальный facility для пользовательского логирования
zh_syslog_send(ZH_LOCAL0, ZH_DEBUG, "esp32", "debugger", "Состояние переменной: 0x1234"); zh_syslog_send(ZH_LOCAL0, ZH_DEBUG, "esp32", "debugger", "Состояние переменной: 0x1234");
zh_syslog_deinit(); zh_syslog_deinit();
} }
``` ```
@@ -401,8 +384,8 @@ void app_main(void)
## Дополнительные заметки ## Дополнительные заметки
- **Надёжность UDP**: Эта библиотека использует UDP, который не гарантирует доставку сообщений. Для надёжной доставки реализуйте приложение-уровень подтверждения. - **Надёжность UDP**: Эта библиотека использует UDP, который не гарантирует доставку сообщений. Для надёжной доставки реализуйте приложение-уровень подтверждения
- **Производительность**: O(n) для форматирования сообщения (n = длина сообщения). Операция отправки блокирующая. - **Производительность**: O(n) для форматирования сообщения (n = длина сообщения). Операция отправки блокирующая
- **Лучшие практики**: - **Лучшие практики**:
- Всегда проверяйте возвращаемые значения от zh_syslog_init() и zh_syslog_send() - Всегда проверяйте возвращаемые значения от zh_syslog_init() и zh_syslog_send()
- Вызывайте zh_syslog_deinit() перед выходом из приложения или выгрузкой модуля - Вызывайте zh_syslog_deinit() перед выходом из приложения или выгрузкой модуля