logsink: fix multiple issues with LogSink::ToString() (#852)

1. Initializing std::ostringstream with a string makes no sense, as the
   string becomes an initial value of an underlying buffer; seek-to-end
   is not performed, so the initial value gets completely overwritten by
   subsequent writing.

2. Flag `log_year_in_prefix` should be considered, as if formatting a
   regular logging message.

3. Writing a buffer to std::ostream is better expressed with write(s,n).
This commit is contained in:
Andrei Polushin 2022-08-13 17:21:25 +07:00 committed by GitHub
parent 6d5b384507
commit acc60d0c38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 6 deletions

View File

@ -2133,12 +2133,14 @@ void LogSink::WaitTillSent() {
string LogSink::ToString(LogSeverity severity, const char* file, int line, string LogSink::ToString(LogSeverity severity, const char* file, int line,
const LogMessageTime& logmsgtime, const char* message, const LogMessageTime& logmsgtime, const char* message,
size_t message_len) { size_t message_len) {
ostringstream stream(string(message, message_len)); ostringstream stream;
stream.fill('0'); stream.fill('0');
stream << LogSeverityNames[severity][0] stream << LogSeverityNames[severity][0];
<< setw(4) << 1900 + logmsgtime.year() if (FLAGS_log_year_in_prefix) {
<< setw(2) << 1 + logmsgtime.month() stream << setw(4) << 1900 + logmsgtime.year();
}
stream << setw(2) << 1 + logmsgtime.month()
<< setw(2) << logmsgtime.day() << setw(2) << logmsgtime.day()
<< ' ' << ' '
<< setw(2) << logmsgtime.hour() << ':' << setw(2) << logmsgtime.hour() << ':'
@ -2150,7 +2152,9 @@ string LogSink::ToString(LogSeverity severity, const char* file, int line,
<< ' ' << ' '
<< file << ':' << line << "] "; << file << ':' << line << "] ";
stream << string(message, message_len); // A call to `write' is enclosed in parenthneses to prevent possible macro
// expansion. On Windows, `write' could be a macro defined for portability.
(stream.write)(message, static_cast<std::streamsize>(message_len));
return stream.str(); return stream.str();
} }

View File

@ -84,7 +84,7 @@
#define getcwd _getcwd #define getcwd _getcwd
#define open _open #define open _open
#define read _read #define read _read
#define write _write #define write(fd, p, n) _write(fd, p, n)
#define lseek _lseek #define lseek _lseek
#define close _close #define close _close
#define popen _popen #define popen _popen