diff options
author | Andy Schwerin <schwerin@mongodb.com> | 2015-12-18 10:39:47 -0500 |
---|---|---|
committer | Andy Schwerin <schwerin@mongodb.com> | 2015-12-21 17:41:16 -0500 |
commit | 7e7ea93facc494fbc393f7170d50b371fbf5f9f0 (patch) | |
tree | 03c664585f2c79489f1c171aecbf3bb8177a1ac3 /src/mongo/logger | |
parent | da0c2e704aa0edc8830669865b984d8db861e01e (diff) | |
download | mongo-7e7ea93facc494fbc393f7170d50b371fbf5f9f0.tar.gz |
SERVER-21959 Do not truncate stack traces in log messages.
Diffstat (limited to 'src/mongo/logger')
-rw-r--r-- | src/mongo/logger/logstream_builder.cpp | 5 | ||||
-rw-r--r-- | src/mongo/logger/logstream_builder.h | 6 | ||||
-rw-r--r-- | src/mongo/logger/message_event.h | 15 | ||||
-rw-r--r-- | src/mongo/logger/message_event_utf8_encoder.cpp | 6 |
4 files changed, 23 insertions, 9 deletions
diff --git a/src/mongo/logger/logstream_builder.cpp b/src/mongo/logger/logstream_builder.cpp index aa5d9d63eac..2577704aad0 100644 --- a/src/mongo/logger/logstream_builder.cpp +++ b/src/mongo/logger/logstream_builder.cpp @@ -102,7 +102,8 @@ LogstreamBuilder::LogstreamBuilder(LogstreamBuilder&& other) _component(std::move(other._component)), _baseMessage(std::move(other._baseMessage)), _os(std::move(other._os)), - _tee(std::move(other._tee)) {} + _tee(std::move(other._tee)), + _isTruncatable(other._isTruncatable) {} LogstreamBuilder& LogstreamBuilder::operator=(LogstreamBuilder&& other) { _domain = std::move(other._domain); @@ -112,6 +113,7 @@ LogstreamBuilder& LogstreamBuilder::operator=(LogstreamBuilder&& other) { _baseMessage = std::move(other._baseMessage); _os = std::move(other._os); _tee = std::move(other._tee); + _isTruncatable = std::move(other._isTruncatable); return *this; } @@ -123,6 +125,7 @@ LogstreamBuilder::~LogstreamBuilder() { _baseMessage += _os->str(); MessageEventEphemeral message( Date_t::now(), _severity, _component, _contextName, _baseMessage); + message.setIsTruncatable(_isTruncatable); _domain->append(message); if (_tee) { _os->str(""); diff --git a/src/mongo/logger/logstream_builder.h b/src/mongo/logger/logstream_builder.h index 275ce871bdd..40f56ccf75f 100644 --- a/src/mongo/logger/logstream_builder.h +++ b/src/mongo/logger/logstream_builder.h @@ -115,6 +115,11 @@ public: return *this; } + LogstreamBuilder& setIsTruncatable(bool isTruncatable) { + _isTruncatable = isTruncatable; + return *this; + } + std::ostream& stream() { if (!_os) makeStream(); @@ -230,6 +235,7 @@ private: std::string _baseMessage; std::unique_ptr<std::ostringstream> _os; Tee* _tee; + bool _isTruncatable = true; }; diff --git a/src/mongo/logger/message_event.h b/src/mongo/logger/message_event.h index 331e46282eb..edc6542a79f 100644 --- a/src/mongo/logger/message_event.h +++ b/src/mongo/logger/message_event.h @@ -49,11 +49,7 @@ public: LogSeverity severity, StringData contextName, StringData message) - : _date(date), - _severity(severity), - _component(LogComponent::kDefault), - _contextName(contextName), - _message(message) {} + : MessageEventEphemeral(date, severity, LogComponent::kDefault, contextName, message) {} MessageEventEphemeral(Date_t date, LogSeverity severity, @@ -66,6 +62,11 @@ public: _contextName(contextName), _message(message) {} + MessageEventEphemeral& setIsTruncatable(bool value) { + _isTruncatable = value; + return *this; + } + Date_t getDate() const { return _date; } @@ -81,6 +82,9 @@ public: StringData getMessage() const { return _message; } + bool isTruncatable() const { + return _isTruncatable; + } private: Date_t _date; @@ -88,6 +92,7 @@ private: LogComponent _component; StringData _contextName; StringData _message; + bool _isTruncatable = true; }; } // namespace logger diff --git a/src/mongo/logger/message_event_utf8_encoder.cpp b/src/mongo/logger/message_event_utf8_encoder.cpp index ee9bfa19e8b..3483a113d1e 100644 --- a/src/mongo/logger/message_event_utf8_encoder.cpp +++ b/src/mongo/logger/message_event_utf8_encoder.cpp @@ -67,9 +67,9 @@ std::ostream& MessageEventDetailsEncoder::encode(const MessageEventEphemeral& ev } StringData msg = event.getMessage(); - if (msg.size() > maxLogLine) { - os << "warning: log line attempted (" << msg.size() / 1024 << "k) over max size (" - << maxLogLine / 1024 << "k), printing beginning and end ... "; + if (event.isTruncatable() && msg.size() > maxLogLine) { + os << "warning: log line attempted (" << msg.size() / 1024 << "kB) over max size (" + << maxLogLine / 1024 << "kB), printing beginning and end ... "; os << msg.substr(0, maxLogLine / 3); os << " .......... "; os << msg.substr(msg.size() - (maxLogLine / 3)); |