diff --git a/src/libraries/JANA/JLogger.cc b/src/libraries/JANA/JLogger.cc index 61d97c2fd..f4680037d 100644 --- a/src/libraries/JANA/JLogger.cc +++ b/src/libraries/JANA/JLogger.cc @@ -4,4 +4,6 @@ JLogger jout {JLogger::Level::INFO, &std::cout, "jana"}; JLogger jerr {JLogger::Level::ERROR, &std::cerr, "jana"}; +thread_local int JLogger::thread_id = -1; +std::atomic_int JLogger::next_thread_id = 0; diff --git a/src/libraries/JANA/JLogger.h b/src/libraries/JANA/JLogger.h index 6b49adaf8..250894437 100644 --- a/src/libraries/JANA/JLogger.h +++ b/src/libraries/JANA/JLogger.h @@ -9,10 +9,10 @@ #include #include #include -#include #include #include #include +#include #ifndef JANA2_USE_LOGGER_MUTEX #define JANA2_USE_LOGGER_MUTEX 0 @@ -20,6 +20,9 @@ struct JLogger { + static thread_local int thread_id; + static std::atomic_int next_thread_id; + enum class Level { TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF }; Level level; std::ostream *destination; @@ -90,6 +93,13 @@ class JLogMessage : public std::stringstream { builder << std::put_time(&tm_buf, "%H:%M:%S."); builder << std::setfill('0') << std::setw(3) << milliseconds.count() << std::setfill(' ') << " "; } + if (logger.show_threadstamp) { + if (logger.thread_id == -1) { + logger.thread_id = logger.next_thread_id; + logger.next_thread_id += 1; + } + builder << "#" << std::setw(3) << std::setfill('0') << logger.thread_id << " "; + } if (logger.show_level) { switch (level) { case JLogger::Level::TRACE: builder << "[trace] "; break; @@ -101,9 +111,6 @@ class JLogMessage : public std::stringstream { default: builder << "[?????] "; } } - if (logger.show_threadstamp) { - builder << std::this_thread::get_id() << " "; - } if (logger.show_group && !logger.group.empty()) { builder << logger.group << " > "; }