summaryrefslogtreecommitdiff
path: root/src/mongo/logger
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@mongodb.com>2015-12-18 10:39:47 -0500
committerAndy Schwerin <schwerin@mongodb.com>2015-12-21 17:41:16 -0500
commit7e7ea93facc494fbc393f7170d50b371fbf5f9f0 (patch)
tree03c664585f2c79489f1c171aecbf3bb8177a1ac3 /src/mongo/logger
parentda0c2e704aa0edc8830669865b984d8db861e01e (diff)
downloadmongo-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.cpp5
-rw-r--r--src/mongo/logger/logstream_builder.h6
-rw-r--r--src/mongo/logger/message_event.h15
-rw-r--r--src/mongo/logger/message_event_utf8_encoder.cpp6
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));