Логирование
Фреймворк предоставляет полноценную систему логирования с поддержкой всех уровней syslog. Система позволяет настраивать фильтрацию по уровню важности и включать/выключать логирование через конфигурационный файл.
Уровни логирования
Фреймворк поддерживает все 8 стандартных уровней логирования syslog (от наиболее критичных к наименее критичным):
log_emerg 0
Система неработоспособна. Критическая ситуация, требующая немедленного внимания.
log_emerg("System is unusable: %s\n", error_msg);log_alert 1
Требуется немедленное действие. Необходима срочная реакция для предотвращения серьезных проблем.
log_alert("Database connection pool exhausted\n");log_crit 2
Критическое состояние. Серьезная проблема, требующая внимания.
log_crit("Critical error in authentication module\n");log_error 3
Ошибки. Проблемы, которые нужно исправить, но система продолжает работать.
log_error("Failed to process request: %s\n", error);log_warning 4
Предупреждения. Потенциальные проблемы, которые стоит проверить.
log_warning("Connection timeout increased to %d seconds\n", timeout);log_notice 5
Важные уведомления. Нормальные, но важные события.
log_notice("Configuration reloaded successfully\n");log_info 6
Информационные сообщения. Полезная информация о работе системы.
log_info("Processing request from %s\n", client_ip);log_debug 7
Отладочные сообщения. Детальная информация для диагностики.
log_debug("Query executed in %d ms: %s\n", duration, query);Вспомогательные функции
print
Выводит сообщение только в стандартный вывод без записи в журнал syslog. Полезно для отладки.
print("Debug output: %d\n", value);Настройка логирования
Система логирования настраивается через секцию log в файле config.json:
{
"main": {
"log": {
"enabled": true,
"level": "info"
}
}
}enabled boolean
Включает или отключает логирование. При false все сообщения игнорируются.
level string
Минимальный уровень логирования. Сообщения с более низким приоритетом будут отфильтрованы.
Допустимые значения (в порядке убывания приоритета):
emerg— только критические сбои системыalert— экстренные ситуацииcrit— критические ошибкиerrилиerror— обычные ошибкиwarningилиwarn— предупрежденияnotice— важные уведомленияinfo— информационные сообщенияdebug— все сообщения, включая отладочные
Пример: если установлен уровень warning, будут записываться только сообщения уровней emerg, alert, crit, error и warning. Сообщения notice, info и debug будут проигнорированы.
Где хранятся логи
Все сообщения (кроме вызовов print) записываются в системный журнал syslog и обычно доступны в файле /var/log/syslog.
Для просмотра логов используйте:
# Просмотр всех логов приложения
sudo tail -f /var/log/syslog
# Фильтрация по уровню (например, только ошибки)
sudo grep "error" /var/log/syslog
# Использование journalctl (systemd)
sudo journalctl -fПример использования
#include "http1.h"
#include "log.h"
void get(http1request_t* request, http1response_t* response) {
log_info("Processing GET request\n");
if (validate_request(request)) {
log_debug("Request validation passed\n");
response->data(response, "OK");
} else {
log_error("Request validation failed\n");
response->status(response, 400);
response->data(response, "Bad Request");
}
}Рекомендации по использованию
- emerg/alert/crit — используйте только для действительно критических ситуаций, требующих немедленного вмешательства
- error — для ошибок, которые нужно исправить, но система продолжает работать
- warning — для потенциальных проблем или нестандартных ситуаций
- notice — для важных событий в жизненном цикле приложения
- info — для отслеживания нормальной работы (запуск, остановка, обработка запросов)
- debug — для детальной диагностики, отключайте в production
Совет
В production окружении рекомендуется устанавливать уровень info или notice, чтобы избежать избыточного логирования. Для разработки и отладки используйте debug.