From 7ee62814262a55cf1599b97b515fe8084bfb10b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simon=20D=C3=A9saulniers?= <sim.desaulniers@gmail.com>
Date: Wed, 19 Oct 2016 15:34:40 -0400
Subject: [PATCH] log: display time before each line in log

---
 include/opendht/log.h | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/include/opendht/log.h b/include/opendht/log.h
index 5a47e870..863fcf25 100644
--- a/include/opendht/log.h
+++ b/include/opendht/log.h
@@ -24,6 +24,7 @@
 
 #include <iostream>
 #include <fstream>
+#include <chrono>
 
 namespace dht {
 namespace log {
@@ -63,13 +64,23 @@ constexpr const Color::Modifier yellow(Color::FG_YELLOW);
  */
 void
 printLog(std::ostream& s, char const* m, va_list args) {
-    static constexpr int BUF_SZ = 8192;
-    char buffer[BUF_SZ];
-    int ret = vsnprintf(buffer, sizeof(buffer), m, args);
+    // print log to buffer
+    std::array<char, 8192> buffer;
+    int ret = vsnprintf(buffer.data(), buffer.size(), m, args);
     if (ret < 0)
         return;
-    s.write(buffer, std::min(ret, BUF_SZ));
-    if (ret >= BUF_SZ)
+
+    // write timestamp
+    using namespace std::chrono;
+    using log_precision = microseconds;
+    constexpr auto den = log_precision::period::den;
+    auto micro = duration_cast<log_precision>(steady_clock::now().time_since_epoch()).count();
+    s << "[" << std::setfill('0') << std::setw(6) << micro / den << "." 
+             << std::setfill('0') << std::setw(6) << micro % den << "]" << " ";
+
+    // write log
+    s.write(buffer.data(), std::min((size_t)ret, buffer.size()));
+    if ((size_t)ret >= buffer.size())
         s << "[[TRUNCATED]]";
     s.put('\n');
 }
-- 
GitLab