From dfb9ffc324c9a509f44bedbad252567109837a2b Mon Sep 17 00:00:00 2001 From: Sergiu Deitsch Date: Tue, 14 Dec 2021 20:12:22 +0100 Subject: [PATCH] provide backward compatible send overload --- bazel/glog.bzl | 5 +- src/glog/logging.h.in | 47 +++++++++-------- src/logging.cc | 114 ++++++++++++++++++++++++++++++------------ src/utilities.h | 2 - 4 files changed, 110 insertions(+), 58 deletions(-) diff --git a/bazel/glog.bzl b/bazel/glog.bzl index 06b0ac8..1392bfb 100644 --- a/bazel/glog.bzl +++ b/bazel/glog.bzl @@ -154,9 +154,12 @@ def glog_library(namespace = "google", with_gflags = 1, **kwargs): # generated for Bazel. "@bazel_tools//src/conditions:windows": [ "GOOGLE_GLOG_DLL_DECL=__declspec(dllexport)", + "GLOG_DEPRECATED=__declspec(deprecated)", "GLOG_NO_ABBREVIATED_SEVERITIES", ], - "//conditions:default": [], + "//conditions:default": [ + "GLOG_DEPRECATED=__attribute__((deprecated))", + ], }), copts = select({ diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in index f20aefb..3b32758 100644 --- a/src/glog/logging.h.in +++ b/src/glog/logging.h.in @@ -133,23 +133,17 @@ typedef unsigned __int64 uint64; #error Do not know how to define a 32-bit integer quantity on your system #endif -@ac_google_end_namespace@ +typedef double WallTime; struct GOOGLE_GLOG_DLL_DECL LogMessageTime { - LogMessageTime(): time_struct_(), timestamp_(0), usecs_(0), gmtoffset_(0) {} - - void setTimeInfo(struct::tm time_struct, time_t timestamp, int32_t usecs){ - time_struct_ = time_struct; - timestamp_ = timestamp; - usecs_ = usecs; - - CalcGmtOffset(); - } + LogMessageTime(); + LogMessageTime(std::tm t); + LogMessageTime(std::time_t timestamp, WallTime now); const time_t& timestamp() const { return timestamp_; } const int& sec() const { return time_struct_.tm_sec; } const int32_t& usec() const { return usecs_; } - const int& (min)() const { return time_struct_.tm_min; } + const int&(min)() const { return time_struct_.tm_min; } const int& hour() const { return time_struct_.tm_hour; } const int& day() const { return time_struct_.tm_mday; } const int& month() const { return time_struct_.tm_mon; } @@ -158,14 +152,16 @@ struct GOOGLE_GLOG_DLL_DECL LogMessageTime { const int& dayInYear() const { return time_struct_.tm_yday; } const int& dst() const { return time_struct_.tm_isdst; } const long int& gmtoff() const { return gmtoffset_; } + const std::tm& tm() const { return time_struct_; } - private: - struct::tm time_struct_; // Time of creation of LogMessage - time_t timestamp_; // Time of creation of LogMessage in seconds - int32_t usecs_; // Time of creation of LogMessage - microseconds part - long int gmtoffset_; + private: + void init(const std::tm& t, std::time_t timestamp, WallTime now); + std::tm time_struct_; // Time of creation of LogMessage + time_t timestamp_; // Time of creation of LogMessage in seconds + int32_t usecs_; // Time of creation of LogMessage - microseconds part + long int gmtoffset_; - void CalcGmtOffset(); + void CalcGmtOffset(); }; #ifdef GLOG_CUSTOM_PREFIX_SUPPORT @@ -187,8 +183,12 @@ struct LogMessageInfo { }; typedef void(*CustomPrefixCallback)(std::ostream& s, const LogMessageInfo& l, void* data); + #endif +@ac_google_end_namespace@ + + // The global value of GOOGLE_STRIP_LOG. All the messages logged to // LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed. // If it can be determined at compile time that the message will not be @@ -1562,9 +1562,7 @@ public: // Must be called without the log_mutex held. (L < log_mutex) static int64 num_messages(int severity); - const LogMessageTime& getLogMessageTime() const { - return logmsgtime_; - } + const LogMessageTime& getLogMessageTime() const; struct LogMessageData; @@ -1736,8 +1734,13 @@ class GOOGLE_GLOG_DLL_DECL LogSink { // during this call. virtual void send(LogSeverity severity, const char* full_filename, const char* base_filename, int line, - const LogMessageTime &logmsgtime, - const char* message, size_t message_len) = 0; + const LogMessageTime& logmsgtime, const char* message, + size_t message_len); + // Provide an overload for compatibility purposes + GLOG_DEPRECATED + virtual void send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, const std::tm* t, + const char* message, size_t message_len); // Redefine this to implement waiting for // the sink's logging logic to complete. diff --git a/src/logging.cc b/src/logging.cc index 85b891e..8ef664f 100644 --- a/src/logging.cc +++ b/src/logging.cc @@ -487,8 +487,7 @@ class LogCleaner { bool enabled() const { return enabled_; } private: - vector GetOverdueLogNames(string log_directory, - unsigned int days, + vector GetOverdueLogNames(string log_directory, unsigned int days, const string& base_filename, const string& filename_extension) const; @@ -496,8 +495,7 @@ class LogCleaner { const string& base_filename, const string& filename_extension) const; - bool IsLogLastModifiedOver(const string& filepath, - unsigned int days) const; + bool IsLogLastModifiedOver(const string& filepath, unsigned int days) const; bool enabled_; unsigned int overdue_days_; @@ -567,12 +565,9 @@ class LogDestination { const char* message, size_t len); // Send logging info to all registered sinks. - static void LogToSinks(LogSeverity severity, - const char *full_filename, - const char *base_filename, - int line, - const LogMessageTime &logmsgtime, - const char* message, + static void LogToSinks(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, + const LogMessageTime& logmsgtime, const char* message, size_t message_len); // Wait for all registered sinks via WaitTillSent @@ -850,10 +845,9 @@ inline void LogDestination::LogToAllLogfiles(LogSeverity severity, } inline void LogDestination::LogToSinks(LogSeverity severity, - const char *full_filename, - const char *base_filename, - int line, - const LogMessageTime &logmsgtime, + const char* full_filename, + const char* base_filename, int line, + const LogMessageTime& logmsgtime, const char* message, size_t message_len) { ReaderMutexLock l(&sink_mutex_); @@ -1134,10 +1128,11 @@ void LogFileObject::Write(bool force_flush, rollover_attempt_ = 0; struct ::tm tm_time; - if (FLAGS_log_utc_time) - gmtime_r(×tamp, &tm_time); - else - localtime_r(×tamp, &tm_time); + if (FLAGS_log_utc_time) { + gmtime_r(×tamp, &tm_time); + } else { + localtime_r(×tamp, &tm_time); + } // The logfile's filename will have the date/time & pid in it ostringstream time_pid_stream; @@ -1343,10 +1338,9 @@ void LogCleaner::Run(bool base_filename_selected, } } -vector LogCleaner::GetOverdueLogNames(string log_directory, - unsigned int days, - const string& base_filename, - const string& filename_extension) const { +vector LogCleaner::GetOverdueLogNames( + string log_directory, unsigned int days, const string& base_filename, + const string& filename_extension) const { // The names of overdue logs. vector overdue_log_names; @@ -1605,14 +1599,7 @@ void LogMessage::Init(const char* file, data_->outvec_ = NULL; WallTime now = WallTime_Now(); time_t timestamp_now = static_cast(now); - std::tm time_struct; - if(FLAGS_log_utc_time) - gmtime_r(×tamp_now, &time_struct); - else - localtime_r(×tamp_now, &time_struct); - - logmsgtime_.setTimeInfo(time_struct, timestamp_now, - static_cast((now - timestamp_now) * 1000000)); + logmsgtime_ = LogMessageTime(timestamp_now, now); data_->num_chars_to_log_ = 0; data_->num_chars_to_syslog_ = 0; @@ -1674,6 +1661,10 @@ void LogMessage::Init(const char* file, } } +const LogMessageTime& LogMessage::getLogMessageTime() const { + return logmsgtime_; +} + LogMessage::~LogMessage() { Flush(); #ifdef GLOG_THREAD_LOCAL_STORAGE @@ -2023,13 +2014,45 @@ void SetLogSymlink(LogSeverity severity, const char* symlink_basename) { LogSink::~LogSink() { } +void LogSink::send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, + const LogMessageTime& time, const char* message, + size_t message_len) { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4996) +#endif // __GNUC__ + send(severity, full_filename, base_filename, line, &time.tm(), message, + message_len); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#endif // __GNUC__ +} + +void LogSink::send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, const std::tm* t, + const char* message, size_t message_len) { + (void)severity; + (void)full_filename; + (void)base_filename; + (void)line; + (void)t; + (void)message; + (void)message_len; +} + void LogSink::WaitTillSent() { // noop default } string LogSink::ToString(LogSeverity severity, const char* file, int line, - const LogMessageTime &logmsgtime, - const char* message, size_t message_len) { + const LogMessageTime& logmsgtime, const char* message, + size_t message_len) { ostringstream stream(string(message, message_len)); stream.fill('0'); @@ -2559,7 +2582,31 @@ void DisableLogCleaner() { log_cleaner.Disable(); } -_END_GOOGLE_NAMESPACE_ +LogMessageTime::LogMessageTime() + : time_struct_(), timestamp_(0), usecs_(0), gmtoffset_(0) {} + +LogMessageTime::LogMessageTime(std::tm t) { + std::time_t timestamp = std::mktime(&t); + init(t, timestamp, 0); +} + +LogMessageTime::LogMessageTime(std::time_t timestamp, WallTime now) { + std::tm t; + if (FLAGS_log_utc_time) + gmtime_r(×tamp, &t); + else + localtime_r(×tamp, &t); + init(t, timestamp, now); +} + +void LogMessageTime::init(const std::tm& t, std::time_t timestamp, + WallTime now) { + time_struct_ = t; + timestamp_ = timestamp; + usecs_ = static_cast((now - timestamp) * 1000000); + + CalcGmtOffset(); +} void LogMessageTime::CalcGmtOffset() { std::tm gmt_struct; @@ -2579,3 +2626,4 @@ void LogMessageTime::CalcGmtOffset() { gmtoffset_ = static_cast(timestamp_ - gmt_sec + (isDst ? hour_secs : 0) ) ; } +_END_GOOGLE_NAMESPACE_ diff --git a/src/utilities.h b/src/utilities.h index 62f4167..bd818dc 100644 --- a/src/utilities.h +++ b/src/utilities.h @@ -147,8 +147,6 @@ const char* ProgramInvocationShortName(); int64 CycleClock_Now(); int64 UsecToCycles(int64 usec); - -typedef double WallTime; WallTime WallTime_Now(); int32 GetMainThreadPid();