summaryrefslogtreecommitdiff
path: root/src/mongo/logger/logstream_builder.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/logger/logstream_builder.h')
-rw-r--r--src/mongo/logger/logstream_builder.h291
1 files changed, 175 insertions, 116 deletions
diff --git a/src/mongo/logger/logstream_builder.h b/src/mongo/logger/logstream_builder.h
index 5bc4ebea990..0a5f943ab78 100644
--- a/src/mongo/logger/logstream_builder.h
+++ b/src/mongo/logger/logstream_builder.h
@@ -41,125 +41,184 @@
namespace mongo {
namespace logger {
- class Tee;
+class Tee;
+
+/**
+ * Stream-ish object used to build and append log messages.
+ */
+class MONGO_CLIENT_API LogstreamBuilder {
+public:
+ static LogSeverity severityCast(int ll) {
+ return LogSeverity::cast(ll);
+ }
+ static LogSeverity severityCast(LogSeverity ls) {
+ return ls;
+ }
+ static LabeledLevel severityCast(const LabeledLevel& labeled) {
+ return labeled;
+ }
+
+ /**
+ * Construct a LogstreamBuilder that writes to "domain" on destruction.
+ *
+ * "contextName" is a short name of the thread or other context.
+ * "severity" is the logging severity of the message.
+ */
+ LogstreamBuilder(MessageLogDomain* domain,
+ const std::string& contextName,
+ LogSeverity severity);
+
+ /**
+ * Construct a LogstreamBuilder that writes to "domain" on destruction.
+ *
+ * "contextName" is a short name of the thread or other context.
+ * "severity" is the logging severity of the message.
+ * "component" is the primary log component of the message.
+ */
+ LogstreamBuilder(MessageLogDomain* domain,
+ const std::string& contextName,
+ LogSeverity severity,
+ LogComponent component);
+
+ /**
+ * Deprecated.
+ */
+ LogstreamBuilder(MessageLogDomain* domain,
+ const std::string& contextName,
+ LabeledLevel labeledLevel);
+
+ /**
+ * Copies a LogstreamBuilder. LogstreamBuilder instances are copyable only until the first
+ * call to stream() or operator<<.
+ *
+ * TODO(schwerin): After C++11 transition, replace with a move-constructor, and make
+ * LogstreamBuilder movable.
+ */
+ LogstreamBuilder(const LogstreamBuilder& other);
+
+ /**
+ * Destroys a LogstreamBuilder(). If anything was written to it via stream() or operator<<,
+ * constructs a MessageLogDomain::Event and appends it to the associated domain.
+ */
+ ~LogstreamBuilder();
+
/**
- * Stream-ish object used to build and append log messages.
+ * Sets an optional prefix for the message.
*/
- class MONGO_CLIENT_API LogstreamBuilder {
- public:
- static LogSeverity severityCast(int ll) { return LogSeverity::cast(ll); }
- static LogSeverity severityCast(LogSeverity ls) { return ls; }
- static LabeledLevel severityCast(const LabeledLevel &labeled) { return labeled; }
-
- /**
- * Construct a LogstreamBuilder that writes to "domain" on destruction.
- *
- * "contextName" is a short name of the thread or other context.
- * "severity" is the logging severity of the message.
- */
- LogstreamBuilder(MessageLogDomain* domain,
- const std::string& contextName,
- LogSeverity severity);
-
- /**
- * Construct a LogstreamBuilder that writes to "domain" on destruction.
- *
- * "contextName" is a short name of the thread or other context.
- * "severity" is the logging severity of the message.
- * "component" is the primary log component of the message.
- */
- LogstreamBuilder(MessageLogDomain* domain,
- const std::string& contextName,
- LogSeverity severity,
- LogComponent component);
-
- /**
- * Deprecated.
- */
- LogstreamBuilder(MessageLogDomain* domain,
- const std::string& contextName,
- LabeledLevel labeledLevel);
-
- /**
- * Copies a LogstreamBuilder. LogstreamBuilder instances are copyable only until the first
- * call to stream() or operator<<.
- *
- * TODO(schwerin): After C++11 transition, replace with a move-constructor, and make
- * LogstreamBuilder movable.
- */
- LogstreamBuilder(const LogstreamBuilder& other);
-
- /**
- * Destroys a LogstreamBuilder(). If anything was written to it via stream() or operator<<,
- * constructs a MessageLogDomain::Event and appends it to the associated domain.
- */
- ~LogstreamBuilder();
-
-
- /**
- * Sets an optional prefix for the message.
- */
- LogstreamBuilder& setBaseMessage(const std::string& baseMessage) {
- _baseMessage = baseMessage;
- return *this;
- }
-
- std::ostream& stream() { makeStream(); return *_os; }
-
- LogstreamBuilder& operator<<(const char *x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(const std::string& x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(const StringData& x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(char *x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(char x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(int x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(ExitCode x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(long x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(unsigned long x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(unsigned x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(unsigned short x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(double x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(void *x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(const void *x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(long long x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(unsigned long long x) { stream() << x; return *this; }
- LogstreamBuilder& operator<<(bool x) { stream() << x; return *this; }
-
- template <typename T>
- LogstreamBuilder& operator<<(const T& x) {
- stream() << x.toString();
- return *this;
- }
-
- LogstreamBuilder& operator<< (std::ostream& ( *manip )(std::ostream&)) {
- stream() << manip;
- return *this;
- }
- LogstreamBuilder& operator<< (std::ios_base& (*manip)(std::ios_base&)) {
- stream() << manip;
- return *this;
- }
-
- /**
- * In addition to appending the message to _domain, write it to the given tee. May only
- * be called once per instance of LogstreamBuilder.
- */
- void operator<<(Tee* tee);
-
- private:
- LogstreamBuilder& operator=(const LogstreamBuilder& other);
-
- void makeStream();
-
- MessageLogDomain* _domain;
- std::string _contextName;
- LogSeverity _severity;
- LogComponent _component;
- std::string _baseMessage;
- std::ostringstream* _os;
- Tee* _tee;
-
- };
+ LogstreamBuilder& setBaseMessage(const std::string& baseMessage) {
+ _baseMessage = baseMessage;
+ return *this;
+ }
+
+ std::ostream& stream() {
+ makeStream();
+ return *_os;
+ }
+
+ LogstreamBuilder& operator<<(const char* x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(const std::string& x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(const StringData& x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(char* x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(char x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(int x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(ExitCode x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(long x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(unsigned long x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(unsigned x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(unsigned short x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(double x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(void* x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(const void* x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(long long x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(unsigned long long x) {
+ stream() << x;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(bool x) {
+ stream() << x;
+ return *this;
+ }
+
+ template <typename T>
+ LogstreamBuilder& operator<<(const T& x) {
+ stream() << x.toString();
+ return *this;
+ }
+
+ LogstreamBuilder& operator<<(std::ostream& (*manip)(std::ostream&)) {
+ stream() << manip;
+ return *this;
+ }
+ LogstreamBuilder& operator<<(std::ios_base& (*manip)(std::ios_base&)) {
+ stream() << manip;
+ return *this;
+ }
+
+ /**
+ * In addition to appending the message to _domain, write it to the given tee. May only
+ * be called once per instance of LogstreamBuilder.
+ */
+ void operator<<(Tee* tee);
+
+private:
+ LogstreamBuilder& operator=(const LogstreamBuilder& other);
+
+ void makeStream();
+
+ MessageLogDomain* _domain;
+ std::string _contextName;
+ LogSeverity _severity;
+ LogComponent _component;
+ std::string _baseMessage;
+ std::ostringstream* _os;
+ Tee* _tee;
+};
} // namespace logger