Unverified Commit 5b4fb63d authored by Marco's avatar Marco Committed by GitHub

Prepend the year to each glog line (#516) (#530)

* Prepend the year to each glog line (#516)

This PR fixes issue #516 by prepending the year to each glog line.

Previous format of each line in a log file:
[IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg

New format:
[IWEF]yyyymmdd hh:mm:ss.uuuuuu threadid file:line] msg

* Fix logging_unittest for PR #530

Since the format of each glog line has been changed,
the logging_unittest must also be updated.
parent 7da49d48
...@@ -280,12 +280,13 @@ typedef unsigned __int64 uint64; ...@@ -280,12 +280,13 @@ typedef unsigned __int64 uint64;
// //
// Log lines have this form: // Log lines have this form:
// //
// Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg... // Lyyyymmdd hh:mm:ss.uuuuuu threadid file:line] msg...
// //
// where the fields are defined as follows: // where the fields are defined as follows:
// //
// L A single character, representing the log level // L A single character, representing the log level
// (eg 'I' for INFO) // (eg 'I' for INFO)
// yyyy The year
// mm The month (zero padded; ie May is '05') // mm The month (zero padded; ie May is '05')
// dd The day (zero padded) // dd The day (zero padded)
// hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds // hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds
......
...@@ -64,8 +64,8 @@ ...@@ -64,8 +64,8 @@
// RAW_LOG(ERROR, "Failed foo with %i: %s", status, error); // RAW_LOG(ERROR, "Failed foo with %i: %s", status, error);
// RAW_VLOG(3, "status is %i", status); // RAW_VLOG(3, "status is %i", status);
// These will print an almost standard log lines like this to stderr only: // These will print an almost standard log lines like this to stderr only:
// E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file // E20200821 211317 file.cc:123] RAW: Failed foo with 22: bad_file
// I0821 211317 file.cc:142] RAW: status is 20 // I20200821 211317 file.cc:142] RAW: status is 20
#define RAW_LOG(severity, ...) \ #define RAW_LOG(severity, ...) \
do { \ do { \
switch (@ac_google_namespace@::GLOG_ ## severity) { \ switch (@ac_google_namespace@::GLOG_ ## severity) { \
......
...@@ -385,12 +385,12 @@ static inline string GetCapturedTestStderr() { ...@@ -385,12 +385,12 @@ static inline string GetCapturedTestStderr() {
return GetCapturedTestOutput(STDERR_FILENO); return GetCapturedTestOutput(STDERR_FILENO);
} }
// Check if the string is [IWEF](\d{4}|DATE) // Check if the string is [IWEF](\d{8}|YEARDATE)
static inline bool IsLoggingPrefix(const string& s) { static inline bool IsLoggingPrefix(const string& s) {
if (s.size() != 5) return false; if (s.size() != 9) return false;
if (!strchr("IWEF", s[0])) return false; if (!strchr("IWEF", s[0])) return false;
for (int i = 1; i <= 4; ++i) { for (int i = 1; i <= 8; ++i) {
if (!isdigit(s[i]) && s[i] != "DATE"[i-1]) return false; if (!isdigit(s[i]) && s[i] != "YEARDATE"[i-1]) return false;
} }
return true; return true;
} }
...@@ -398,8 +398,8 @@ static inline bool IsLoggingPrefix(const string& s) { ...@@ -398,8 +398,8 @@ static inline bool IsLoggingPrefix(const string& s) {
// Convert log output into normalized form. // Convert log output into normalized form.
// //
// Example: // Example:
// I0102 030405 logging_unittest.cc:345] RAW: vlog -1 // I20200102 030405 logging_unittest.cc:345] RAW: vlog -1
// => IDATE TIME__ logging_unittest.cc:LINE] RAW: vlog -1 // => IYEARDATE TIME__ logging_unittest.cc:LINE] RAW: vlog -1
static inline string MungeLine(const string& line) { static inline string MungeLine(const string& line) {
std::istringstream iss(line); std::istringstream iss(line);
string before, logcode_date, time, thread_lineinfo; string before, logcode_date, time, thread_lineinfo;
...@@ -428,7 +428,7 @@ static inline string MungeLine(const string& line) { ...@@ -428,7 +428,7 @@ static inline string MungeLine(const string& line) {
thread_lineinfo = thread_lineinfo.substr(0, index+1) + "LINE]"; thread_lineinfo = thread_lineinfo.substr(0, index+1) + "LINE]";
string rest; string rest;
std::getline(iss, rest); std::getline(iss, rest);
return (before + logcode_date[0] + "DATE TIME__ " + thread_lineinfo + return (before + logcode_date[0] + "YEARDATE TIME__ " + thread_lineinfo +
MungeLine(rest)); MungeLine(rest));
} }
......
...@@ -1209,7 +1209,7 @@ void LogFileObject::Write(bool force_flush, ...@@ -1209,7 +1209,7 @@ void LogFileObject::Write(bool force_flush,
<< setw(2) << tm_time.tm_sec << '\n' << setw(2) << tm_time.tm_sec << '\n'
<< "Running on machine: " << "Running on machine: "
<< LogDestination::hostname() << '\n' << LogDestination::hostname() << '\n'
<< "Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu " << "Log line format: [IWEF]yyyymmdd hh:mm:ss.uuuuuu "
<< "threadid file:line] msg" << '\n'; << "threadid file:line] msg" << '\n';
const string& file_header_string = file_header_stream.str(); const string& file_header_string = file_header_stream.str();
...@@ -1421,11 +1421,12 @@ void LogMessage::Init(const char* file, ...@@ -1421,11 +1421,12 @@ void LogMessage::Init(const char* file,
data_->has_been_flushed_ = false; data_->has_been_flushed_ = false;
// If specified, prepend a prefix to each line. For example: // If specified, prepend a prefix to each line. For example:
// I1018 160715 f5d4fbb0 logging.cc:1153] // I20201018 160715 f5d4fbb0 logging.cc:1153]
// (log level, GMT month, date, time, thread_id, file basename, line) // (log level, GMT year, month, date, time, thread_id, file basename, line)
// We exclude the thread_id for the default thread. // We exclude the thread_id for the default thread.
if (FLAGS_log_prefix && (line != kNoLogPrefix)) { if (FLAGS_log_prefix && (line != kNoLogPrefix)) {
stream() << LogSeverityNames[severity][0] stream() << LogSeverityNames[severity][0]
<< setw(4) << 1900+data_->tm_time_.tm_year
<< setw(2) << 1+data_->tm_time_.tm_mon << setw(2) << 1+data_->tm_time_.tm_mon
<< setw(2) << data_->tm_time_.tm_mday << setw(2) << data_->tm_time_.tm_mday
<< ' ' << ' '
...@@ -1827,6 +1828,7 @@ string LogSink::ToString(LogSeverity severity, const char* file, int line, ...@@ -1827,6 +1828,7 @@ string LogSink::ToString(LogSeverity severity, const char* file, int line,
stream.fill('0'); stream.fill('0');
stream << LogSeverityNames[severity][0] stream << LogSeverityNames[severity][0]
<< setw(4) << 1900+tm_time->tm_year
<< setw(2) << 1+tm_time->tm_mon << setw(2) << 1+tm_time->tm_mon
<< setw(2) << tm_time->tm_mday << setw(2) << tm_time->tm_mday
<< ' ' << ' '
......
This diff is collapsed.
...@@ -114,7 +114,7 @@ void RawLog__(LogSeverity severity, const char* file, int line, ...@@ -114,7 +114,7 @@ void RawLog__(LogSeverity severity, const char* file, int line,
int size = sizeof(buffer); int size = sizeof(buffer);
// NOTE: this format should match the specification in base/logging.h // NOTE: this format should match the specification in base/logging.h
DoRawLog(&buf, &size, "%c0000 00:00:00.000000 %5u %s:%d] RAW: ", DoRawLog(&buf, &size, "%c00000000 00:00:00.000000 %5u %s:%d] RAW: ",
LogSeverityNames[severity][0], LogSeverityNames[severity][0],
static_cast<unsigned int>(GetTID()), static_cast<unsigned int>(GetTID()),
const_basename(const_cast<char *>(file)), line); const_basename(const_cast<char *>(file)), line);
......
...@@ -284,12 +284,13 @@ typedef unsigned __int64 uint64; ...@@ -284,12 +284,13 @@ typedef unsigned __int64 uint64;
// //
// Log lines have this form: // Log lines have this form:
// //
// Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg... // Lyyyymmdd hh:mm:ss.uuuuuu threadid file:line] msg...
// //
// where the fields are defined as follows: // where the fields are defined as follows:
// //
// L A single character, representing the log level // L A single character, representing the log level
// (eg 'I' for INFO) // (eg 'I' for INFO)
// yyyy The year
// mm The month (zero padded; ie May is '05') // mm The month (zero padded; ie May is '05')
// dd The day (zero padded) // dd The day (zero padded)
// hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds // hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment