-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLogger.cpp
42 lines (33 loc) · 1.16 KB
/
Logger.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "Logger.h"
#include <cstdarg>
#include <cstdio>
#include <chrono>
#include <array>
namespace Logger
{
void log(const char* format, ...)
{
const auto now = std::chrono::system_clock::now();
const auto nowTimeT = std::chrono::system_clock::to_time_t(now);
tm localTime = {};
localtime_r(&nowTimeT, &localTime);
const auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
std::array<char, 2048> logString{};
std::array<char, 64> timeString{};
snprintf(timeString.data(),
timeString.size(),
"%04d-%02d-%02d %02d:%02d:%02d.%03u",
static_cast<uint16_t>(localTime.tm_year + 1900),
static_cast<uint8_t>(localTime.tm_mon + 1),
static_cast<uint8_t>(localTime.tm_mday),
static_cast<uint8_t>(localTime.tm_hour),
static_cast<uint8_t>(localTime.tm_min),
static_cast<uint8_t>(localTime.tm_sec),
static_cast<uint32_t>(ms % 1000));
va_list args;
va_start(args, format);
vsnprintf(logString.data(), logString.size(), format, args);
fprintf(stdout, "[%s] %s\n", timeString.data(), logString.data());
fflush(stdout);
}
}