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:
parent
6d5b384507
commit
acc60d0c38
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user