Ответ
Точность временных меток в логах зависит от используемых API и требований системы. В современном C++ для этого чаще всего применяют <chrono>.
Типичные уровни точности:
- Секунды/Миллисекунды: Достаточно для логирования событий приложения (запросы пользователя, этапы работы). Достигается с помощью
std::chrono::system_clock. - Микросекунды/Наносекунды: Требуется для профилирования, high-frequency trading (HFT) или embedded-систем. Используется
std::chrono::high_resolution_clockили платформо-специфичные вызовы.
Практический пример с <chrono>:
#include <iostream>
#include <chrono>
#include <iomanip>
#include <sstream>
std::string get_current_timestamp() {
// Получаем текущее время с точностью до микросекунд
auto now = std::chrono::system_clock::now();
auto now_time_t = std::chrono::system_clock::to_time_t(now);
auto now_ms = std::chrono::duration_cast<std::chrono::microseconds>(
now.time_since_epoch()) % 1000000;
std::stringstream ss;
ss << std::put_time(std::localtime(&now_time_t), "%Y-%m-%d %H:%M:%S.")
<< std::setfill('0') << std::setw(6) << now_ms.count();
return ss.str();
}
int main() {
std::cout << "[" << get_current_timestamp() << "] Application started.n";
// ... выполнение работы
std::cout << "[" << get_current_timestamp() << "] Task completed.n";
return 0;
}
// Пример вывода: [2023-10-26 14:30:15.123456] Application started.
Важные замечания:
std::chrono::high_resolution_clockможет быть псевдонимом дляsystem_clockилиsteady_clock, его реальное разрешение зависит от реализации компилятора и ОС.- Для максимальной точности и минимальных накладных расходов в performance-critical коде иногда приходится использовать платформо-специфичные API, такие как
clock_gettime(CLOCK_MONOTONIC, ...)на Linux илиQueryPerformanceCounterна Windows, и затем интегрировать их в C++-код.