⚙️ Структурированное логирование: JSON vs plain text?
Текстовые логи хороши для человека, но кошмарны для автоматизированного анализа. Пришло время переходить на структурированное логирование.
Структурированные логи в формате JSON или другом машиночитаемом формате позволяют легко фильтровать, агрегировать и анализировать данные. Вместо парсинга строк регулярками вы получаете готовые поля: timestamp, level, message, context, trace_id.
В C++ это достигается через библиотеки типа
😏 Используете ли вы структурированное логирование или всё ещё разбираете plain text?
🔹Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹Сайт Proglib
Библиотека C/C++ разработчика
#междусобойчик
Текстовые логи хороши для человека, но кошмарны для автоматизированного анализа. Пришло время переходить на структурированное логирование.
Структурированные логи в формате JSON или другом машиночитаемом формате позволяют легко фильтровать, агрегировать и анализировать данные. Вместо парсинга строк регулярками вы получаете готовые поля: timestamp, level, message, context, trace_id.
В C++ это достигается через библиотеки типа
spdlog с кастомными formatters или специализированные решения вроде Boost.Log. Ключевой момент — добавление контекста: user_id, request_id, session_id. Это превращает хаотичный поток логов в структурированные данные, с которыми может работать ELK stack, Grafana Loki или другие системы мониторинга.😏 Используете ли вы структурированное логирование или всё ещё разбираете plain text?
🔹Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹Сайт Proglib
Библиотека C/C++ разработчика
#междусобойчик
❤1👍1😁1
🔧 std::promise — move-only тип. И это правильно!
Попытка скопировать promise не скомпилируется. Почему? Потому что обещание должно быть выполнено ровно один раз, одним владельцем.
Аналогия: Представьте promise как расписку о долге. Копия расписки — это две расписки? Или передача прав требования? Очевидно, второе.
При передаче в std::thread или lambda используйте:
• std::move для r-value
• mutable lambda если будете вызывать set_value
⚡️ Move-only семантика — это фитча, а не bug. Она предотвращает race conditions и двойные set_value.
Библиотека C/C++ разработчика
#константная_правильность
Попытка скопировать promise не скомпилируется. Почему? Потому что обещание должно быть выполнено ровно один раз, одним владельцем.
// ❌ НЕ СКОМПИЛИРУЕТСЯ
std::promise<int> prom1;
std::promise<int> prom2 = prom1; // Error!
// ✅ Move семантика — владение передаётся
std::promise<int> prom1;
std::promise<int> prom2 = std::move(prom1);
// Типичное использование в потоке
std::thread t([p = std::move(prom)]() mutable {
p.set_value(42); // Только этот поток владеет promise
});
Аналогия: Представьте promise как расписку о долге. Копия расписки — это две расписки? Или передача прав требования? Очевидно, второе.
При передаче в std::thread или lambda используйте:
• std::move для r-value
• mutable lambda если будете вызывать set_value
⚡️ Move-only семантика — это фитча, а не bug. Она предотвращает race conditions и двойные set_value.
Библиотека C/C++ разработчика
#константная_правильность
👍5🙏1
🤖 5 профессий в IT, которые появились благодаря ИИ
Искусственный интеллект не только автоматизирует рутинные задачи, но и создает новые профессии, о которых еще несколько лет назад никто не слышал. Какие именно — рассказываем в этой статье.
👉 Статья
Библиотека C/C++ разработчика
#свежак
Искусственный интеллект не только автоматизирует рутинные задачи, но и создает новые профессии, о которых еще несколько лет назад никто не слышал. Какие именно — рассказываем в этой статье.
👉 Статья
Библиотека C/C++ разработчика
#свежак