doc: updated wiki
This commit is contained in:
1 parent
c6848f6876
commit
da076a19e6
2 files changed
+16
-50
No files matched your search
+8
-25
@@ -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
@@ -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() перед выходом из приложения или выгрузкой модуля
|
||||||
|
|||||||
Reference in new issue
Block a user