125inline void log(
Level level,
const char* file,
int line,
const char* message, Args&&... args) {
126#ifdef VANEDB_ENABLE_LOGGING
132 auto now = std::chrono::system_clock::now();
133 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
134 now.time_since_epoch()) % 1000;
135 auto time = std::chrono::system_clock::to_time_t(now);
138 localtime_s(&tm_buf, &time);
140 localtime_r(&time, &tm_buf);
144 const char* filename = std::strrchr(file,
'/');
145 if (!filename) filename = std::strrchr(file,
'\\');
146 filename = filename ? filename + 1 : file;
149 std::ostringstream ss;
150 ss << std::put_time(&tm_buf,
"%Y-%m-%d %H:%M:%S") <<
"."
151 << std::setfill(
'0') << std::setw(3) << ms.count()
153 << filename <<
":" << line <<
" "
160 std::lock_guard<std::mutex> lock(
log_mutex());
161 std::fputs(ss.str().c_str(), stderr);
169 (void)std::initializer_list<int>{(
static_cast<void>(args), 0)...};