174 absl::string_view message) {
181 auto now = std::chrono::system_clock::now();
182 auto now_tt = std::chrono::system_clock::to_time_t(now);
185 localtime_s(&now_tm, &now_tt);
187 localtime_r(&now_tt, &now_tm);
189 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
190 now.time_since_epoch()) %
193 std::string final_message = absl::StrFormat(
194 "[%02d:%02d:%02d.%03d] [%-5s] [%s] %s\n", now_tm.tm_hour, now_tm.tm_min,
195 now_tm.tm_sec, ms.count(), LogLevelToString(level), category, message);
201 std::lock_guard<std::mutex> lock(LogWriteMutex());
204 static auto last_flush = std::chrono::steady_clock::now();
205 const auto steady_now = std::chrono::steady_clock::now();
207 steady_now - last_flush >= std::chrono::seconds(1)) {
209 last_flush = steady_now;
215 std::cerr << final_message;
const char * LogLevelToString(yaze::util::LogLevel level)