diff --git a/Log.cpp b/Log.cpp index 07730b82..1caaaf80 100644 --- a/Log.cpp +++ b/Log.cpp @@ -5,36 +5,40 @@ Log * g_Log = nullptr; static const char * g_LogLevelStr[eNumLogLevels] = { - "error", // eLogError - "warn", // eLogWarning - "info", // eLogInfo - "debug" // eLogDebug + "error", // eLogError + "warn", // eLogWarning + "info", // eLogInfo + "debug" // eLogDebug }; void LogMsg::Process() { - auto& output = (log && log->GetLogStream ()) ? *log->GetLogStream () : std::cerr; - if (log) - output << log->GetTimestamp (); - else - output << boost::posix_time::second_clock::local_time().time_of_day (); - output << "/" << g_LogLevelStr[level] << " - "; - output << s.str(); + auto& output = (log && log->GetLogStream ()) ? *log->GetLogStream () : std::cerr; + if (log) + output << log->GetTimestamp (); + else + output << boost::posix_time::second_clock::local_time().time_of_day (); + output << "/" << g_LogLevelStr[level] << " - "; + output << s.str(); } const std::string& Log::GetTimestamp () { -#if (__GNUC__ == 4) && (__GNUC_MINOR__ <= 6) - auto ts = std::chrono::monotonic_clock::now (); -#else - auto ts = std::chrono::steady_clock::now (); -#endif - if (ts > m_LastTimestampUpdate + std::chrono::milliseconds (500)) // 0.5 second - { - m_LastTimestampUpdate = ts; - m_Timestamp = boost::posix_time::to_simple_string (boost::posix_time::second_clock::local_time().time_of_day ()); - } - return m_Timestamp; +#if !defined(__APPLE__) +#if (__GNUC__ == 4) && (__GNUC_MINOR__ <= 6) && !defined(__APPLE__) + auto ts = std::chrono::monotonic_clock::now (); +#else + auto ts = std::chrono::steady_clock::now (); +#endif +#else + auto ts = std::chrono::steady_clock::now (); +#endif + if (ts > m_LastTimestampUpdate + std::chrono::milliseconds (500)) // 0.5 second + { + m_LastTimestampUpdate = ts; + m_Timestamp = boost::posix_time::to_simple_string (boost::posix_time::second_clock::local_time().time_of_day ()); + } + return m_Timestamp; } void Log::Flush () @@ -45,18 +49,18 @@ void Log::Flush () void Log::SetLogFile (const std::string& fullFilePath) { - auto logFile = new std::ofstream (fullFilePath, std::ofstream::out | std::ofstream::binary | std::ofstream::trunc); - if (logFile->is_open ()) - { - SetLogStream (logFile); - LogPrint("Logging to file ", fullFilePath, " enabled."); - } - else - delete logFile; + auto logFile = new std::ofstream (fullFilePath, std::ofstream::out | std::ofstream::binary | std::ofstream::trunc); + if (logFile->is_open ()) + { + SetLogStream (logFile); + LogPrint("Logging to file ", fullFilePath, " enabled."); + } + else + delete logFile; } void Log::SetLogStream (std::ostream * logStream) { - if (m_LogStream) delete m_LogStream; - m_LogStream = logStream; + if (m_LogStream) delete m_LogStream; + m_LogStream = logStream; } diff --git a/Log.h b/Log.h index cd82dec6..e982030e 100644 --- a/Log.h +++ b/Log.h @@ -11,23 +11,23 @@ enum LogLevel { - eLogError = 0, - eLogWarning, - eLogInfo, - eLogDebug, - eNumLogLevels + eLogError = 0, + eLogWarning, + eLogInfo, + eLogDebug, + eNumLogLevels }; class Log; struct LogMsg { - std::stringstream s; - Log * log; - LogLevel level; + std::stringstream s; + Log * log; + LogLevel level; - LogMsg (Log * l = nullptr, LogLevel lv = eLogInfo): log (l), level (lv) {}; - - void Process(); + LogMsg (Log * l = nullptr, LogLevel lv = eLogInfo): log (l), level (lv) {}; + + void Process(); }; class Log: public i2p::util::MsgQueue @@ -37,93 +37,97 @@ class Log: public i2p::util::MsgQueue Log (): m_LogStream (nullptr) { SetOnEmpty (std::bind (&Log::Flush, this)); }; ~Log () { delete m_LogStream; }; - void SetLogFile (const std::string& fullFilePath); - void SetLogStream (std::ostream * logStream); - std::ostream * GetLogStream () const { return m_LogStream; }; - const std::string& GetTimestamp (); + void SetLogFile (const std::string& fullFilePath); + void SetLogStream (std::ostream * logStream); + std::ostream * GetLogStream () const { return m_LogStream; }; + const std::string& GetTimestamp (); private: void Flush (); - private: - - std::ostream * m_LogStream; - std::string m_Timestamp; + private: + + std::ostream * m_LogStream; + std::string m_Timestamp; +#if !defined(__APPLE__) #if (__GNUC__ == 4) && (__GNUC_MINOR__ <= 6) // gcc 4.6 - std::chrono::monotonic_clock::time_point m_LastTimestampUpdate; -#else - std::chrono::steady_clock::time_point m_LastTimestampUpdate; -#endif + std::chrono::monotonic_clock::time_point m_LastTimestampUpdate; +#else + std::chrono::steady_clock::time_point m_LastTimestampUpdate; +#endif +#else + std::chrono::steady_clock::time_point m_LastTimestampUpdate; +#endif }; extern Log * g_Log; inline void StartLog (const std::string& fullFilePath) { - if (!g_Log) - { - auto log = new Log (); - if (fullFilePath.length () > 0) - log->SetLogFile (fullFilePath); - g_Log = log; - } + if (!g_Log) + { + auto log = new Log (); + if (fullFilePath.length () > 0) + log->SetLogFile (fullFilePath); + g_Log = log; + } } inline void StartLog (std::ostream * s) { - if (!g_Log) - { - auto log = new Log (); - if (s) - log->SetLogStream (s); - g_Log = log; - } + if (!g_Log) + { + auto log = new Log (); + if (s) + log->SetLogStream (s); + g_Log = log; + } } inline void StopLog () { - if (g_Log) - { - auto log = g_Log; - g_Log = nullptr; - log->Stop (); - delete log; - } + if (g_Log) + { + auto log = g_Log; + g_Log = nullptr; + log->Stop (); + delete log; + } } template -void LogPrint (std::stringstream& s, TValue arg) +void LogPrint (std::stringstream& s, TValue arg) { s << arg; } - + template -void LogPrint (std::stringstream& s, TValue arg, TArgs... args) +void LogPrint (std::stringstream& s, TValue arg, TArgs... args) { LogPrint (s, arg); LogPrint (s, args...); } template -void LogPrint (LogLevel level, TArgs... args) +void LogPrint (LogLevel level, TArgs... args) { - LogMsg * msg = new LogMsg (g_Log, level); - LogPrint (msg->s, args...); - msg->s << std::endl; - if (g_Log) - g_Log->Put (msg); - else - { - msg->Process (); - delete msg; - } + LogMsg * msg = new LogMsg (g_Log, level); + LogPrint (msg->s, args...); + msg->s << std::endl; + if (g_Log) + g_Log->Put (msg); + else + { + msg->Process (); + delete msg; + } } template -void LogPrint (TArgs... args) +void LogPrint (TArgs... args) { - LogPrint (eLogInfo, args...); -} + LogPrint (eLogInfo, args...); +} #endif