summaryrefslogtreecommitdiff
path: root/src/mongo/util/log.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/log.h')
-rw-r--r--src/mongo/util/log.h283
1 files changed, 150 insertions, 133 deletions
diff --git a/src/mongo/util/log.h b/src/mongo/util/log.h
index 9cf2f31ef33..14fd8615469 100644
--- a/src/mongo/util/log.h
+++ b/src/mongo/util/log.h
@@ -37,7 +37,8 @@
// inclusion of log.h will ensure that the default component will be set correctly.
#if defined(MONGO_UTIL_LOG_H_)
-#error "mongo/util/log.h cannot be included multiple times. " \
+#error \
+ "mongo/util/log.h cannot be included multiple times. " \
"This may occur when log.h is included in a header. " \
"Please check your #include's."
#else // MONGO_UTIL_LOG_H_
@@ -57,155 +58,171 @@
const ::mongo::logger::LogComponent MongoLogDefaultComponent_component =
MONGO_LOG_DEFAULT_COMPONENT;
#else
-#error "mongo/util/log.h requires MONGO_LOG_DEFAULT_COMPONENT to be defined. " \
+#error \
+ "mongo/util/log.h requires MONGO_LOG_DEFAULT_COMPONENT to be defined. " \
"Please see http://www.mongodb.org/about/contributors/reference/server-logging-rules/ "
#endif // MONGO_LOG_DEFAULT_COMPONENT
namespace mongo {
namespace logger {
- typedef void (*ExtraLogContextFn)(BufBuilder& builder);
- Status registerExtraLogContextFn(ExtraLogContextFn contextFn);
+typedef void (*ExtraLogContextFn)(BufBuilder& builder);
+Status registerExtraLogContextFn(ExtraLogContextFn contextFn);
} // namespace logger
namespace {
- using logger::LogstreamBuilder;
- using logger::LabeledLevel;
- using logger::Tee;
-
- /**
- * Returns a LogstreamBuilder for logging a message with LogSeverity::Severe().
- */
- inline LogstreamBuilder severe() {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Severe(),
- ::MongoLogDefaultComponent_component);
- }
-
- inline LogstreamBuilder severe(logger::LogComponent component) {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Severe(),
- component);
- }
-
- /**
- * Returns a LogstreamBuilder for logging a message with LogSeverity::Error().
- */
- inline LogstreamBuilder error() {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Error(),
- ::MongoLogDefaultComponent_component);
- }
-
- inline LogstreamBuilder error(logger::LogComponent component) {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Error(),
- component);
- }
-
- /**
- * Returns a LogstreamBuilder for logging a message with LogSeverity::Warning().
- */
- inline LogstreamBuilder warning() {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Warning(),
- ::MongoLogDefaultComponent_component);
- }
-
- inline LogstreamBuilder warning(logger::LogComponent component) {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Warning(),
- component);
- }
-
- /**
- * Returns a LogstreamBuilder for logging a message with LogSeverity::Log().
- */
- inline LogstreamBuilder log() {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Log(),
- ::MongoLogDefaultComponent_component);
- }
-
- inline LogstreamBuilder log(logger::LogComponent component) {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Log(),
- component);
- }
-
- inline LogstreamBuilder log(logger::LogComponent::Value componentValue) {
- return LogstreamBuilder(logger::globalLogDomain(),
- getThreadName(),
- logger::LogSeverity::Log(),
- componentValue);
- }
-
- /**
- * Runs the same logic as log()/warning()/error(), without actually outputting a stream.
- */
- inline bool shouldLog(logger::LogSeverity severity) {
- return logger::globalLogDomain()->shouldLog(::MongoLogDefaultComponent_component, severity);
- }
+using logger::LogstreamBuilder;
+using logger::LabeledLevel;
+using logger::Tee;
+
+/**
+ * Returns a LogstreamBuilder for logging a message with LogSeverity::Severe().
+ */
+inline LogstreamBuilder severe() {
+ return LogstreamBuilder(logger::globalLogDomain(),
+ getThreadName(),
+ logger::LogSeverity::Severe(),
+ ::MongoLogDefaultComponent_component);
+}
+
+inline LogstreamBuilder severe(logger::LogComponent component) {
+ return LogstreamBuilder(
+ logger::globalLogDomain(), getThreadName(), logger::LogSeverity::Severe(), component);
+}
+
+/**
+ * Returns a LogstreamBuilder for logging a message with LogSeverity::Error().
+ */
+inline LogstreamBuilder error() {
+ return LogstreamBuilder(logger::globalLogDomain(),
+ getThreadName(),
+ logger::LogSeverity::Error(),
+ ::MongoLogDefaultComponent_component);
+}
+
+inline LogstreamBuilder error(logger::LogComponent component) {
+ return LogstreamBuilder(
+ logger::globalLogDomain(), getThreadName(), logger::LogSeverity::Error(), component);
+}
+
+/**
+ * Returns a LogstreamBuilder for logging a message with LogSeverity::Warning().
+ */
+inline LogstreamBuilder warning() {
+ return LogstreamBuilder(logger::globalLogDomain(),
+ getThreadName(),
+ logger::LogSeverity::Warning(),
+ ::MongoLogDefaultComponent_component);
+}
+
+inline LogstreamBuilder warning(logger::LogComponent component) {
+ return LogstreamBuilder(
+ logger::globalLogDomain(), getThreadName(), logger::LogSeverity::Warning(), component);
+}
+
+/**
+ * Returns a LogstreamBuilder for logging a message with LogSeverity::Log().
+ */
+inline LogstreamBuilder log() {
+ return LogstreamBuilder(logger::globalLogDomain(),
+ getThreadName(),
+ logger::LogSeverity::Log(),
+ ::MongoLogDefaultComponent_component);
+}
+
+inline LogstreamBuilder log(logger::LogComponent component) {
+ return LogstreamBuilder(
+ logger::globalLogDomain(), getThreadName(), logger::LogSeverity::Log(), component);
+}
+
+inline LogstreamBuilder log(logger::LogComponent::Value componentValue) {
+ return LogstreamBuilder(
+ logger::globalLogDomain(), getThreadName(), logger::LogSeverity::Log(), componentValue);
+}
+
+/**
+ * Runs the same logic as log()/warning()/error(), without actually outputting a stream.
+ */
+inline bool shouldLog(logger::LogSeverity severity) {
+ return logger::globalLogDomain()->shouldLog(::MongoLogDefaultComponent_component, severity);
+}
} // namespace
// MONGO_LOG uses log component from MongoLogDefaultComponent from current or global namespace.
-#define MONGO_LOG(DLEVEL) \
- if (!(::mongo::logger::globalLogDomain())->shouldLog(MongoLogDefaultComponent_component, ::mongo::LogstreamBuilder::severityCast(DLEVEL))) {} \
- else ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), ::mongo::getThreadName(), ::mongo::LogstreamBuilder::severityCast(DLEVEL), MongoLogDefaultComponent_component)
+#define MONGO_LOG(DLEVEL) \
+ if (!(::mongo::logger::globalLogDomain()) \
+ ->shouldLog(MongoLogDefaultComponent_component, \
+ ::mongo::LogstreamBuilder::severityCast(DLEVEL))) { \
+ } else \
+ ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), \
+ ::mongo::getThreadName(), \
+ ::mongo::LogstreamBuilder::severityCast(DLEVEL), \
+ MongoLogDefaultComponent_component)
#define LOG MONGO_LOG
-#define MONGO_LOG_COMPONENT(DLEVEL, COMPONENT1) \
- if (!(::mongo::logger::globalLogDomain())->shouldLog((COMPONENT1), ::mongo::LogstreamBuilder::severityCast(DLEVEL))) {} \
- else ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), ::mongo::getThreadName(), ::mongo::LogstreamBuilder::severityCast(DLEVEL), (COMPONENT1))
-
-#define MONGO_LOG_COMPONENT2(DLEVEL, COMPONENT1, COMPONENT2) \
- if (!(::mongo::logger::globalLogDomain())->shouldLog((COMPONENT1), (COMPONENT2), ::mongo::LogstreamBuilder::severityCast(DLEVEL))) {} \
- else ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), ::mongo::getThreadName(), ::mongo::LogstreamBuilder::severityCast(DLEVEL), (COMPONENT1))
-
-#define MONGO_LOG_COMPONENT3(DLEVEL, COMPONENT1, COMPONENT2, COMPONENT3) \
- if (!(::mongo::logger::globalLogDomain())->shouldLog((COMPONENT1), (COMPONENT2), (COMPONENT3), ::mongo::LogstreamBuilder::severityCast(DLEVEL))) {} \
- else ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), ::mongo::getThreadName(), ::mongo::LogstreamBuilder::severityCast(DLEVEL), (COMPONENT1))
-
- /**
- * Rotates the log files. Returns true if all logs rotate successfully.
- *
- * renameFiles - true means we rename files, false means we expect the file to be renamed
- * externally
- *
- * logrotate on *nix systems expects us not to rename the file, it is expected that the program
- * simply open the file again with the same name.
- * We expect logrotate to rename the existing file before we rotate, and so the next open
- * we do should result in a file create.
- */
- bool rotateLogs(bool renameFiles);
-
- /** output the error # and error message with prefix.
- handy for use as parm in uassert/massert.
- */
- std::string errnoWithPrefix( const char * prefix );
-
- extern Tee* const warnings; // Things put here go in serverStatus
- extern Tee* const startupWarningsLog; // Things put here get reported in MMS
-
- std::string errnoWithDescription(int errorcode = -1);
-
- /**
- * Write the current context (backtrace), along with the optional "msg".
- */
- void logContext(const char *msg = NULL);
-
-} // namespace mongo
+#define MONGO_LOG_COMPONENT(DLEVEL, COMPONENT1) \
+ if (!(::mongo::logger::globalLogDomain()) \
+ ->shouldLog((COMPONENT1), ::mongo::LogstreamBuilder::severityCast(DLEVEL))) { \
+ } else \
+ ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), \
+ ::mongo::getThreadName(), \
+ ::mongo::LogstreamBuilder::severityCast(DLEVEL), \
+ (COMPONENT1))
+
+#define MONGO_LOG_COMPONENT2(DLEVEL, COMPONENT1, COMPONENT2) \
+ if (!(::mongo::logger::globalLogDomain()) \
+ ->shouldLog( \
+ (COMPONENT1), (COMPONENT2), ::mongo::LogstreamBuilder::severityCast(DLEVEL))) { \
+ } else \
+ ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), \
+ ::mongo::getThreadName(), \
+ ::mongo::LogstreamBuilder::severityCast(DLEVEL), \
+ (COMPONENT1))
+
+#define MONGO_LOG_COMPONENT3(DLEVEL, COMPONENT1, COMPONENT2, COMPONENT3) \
+ if (!(::mongo::logger::globalLogDomain()) \
+ ->shouldLog((COMPONENT1), \
+ (COMPONENT2), \
+ (COMPONENT3), \
+ ::mongo::LogstreamBuilder::severityCast(DLEVEL))) { \
+ } else \
+ ::mongo::logger::LogstreamBuilder(::mongo::logger::globalLogDomain(), \
+ ::mongo::getThreadName(), \
+ ::mongo::LogstreamBuilder::severityCast(DLEVEL), \
+ (COMPONENT1))
+
+/**
+ * Rotates the log files. Returns true if all logs rotate successfully.
+ *
+ * renameFiles - true means we rename files, false means we expect the file to be renamed
+ * externally
+ *
+ * logrotate on *nix systems expects us not to rename the file, it is expected that the program
+ * simply open the file again with the same name.
+ * We expect logrotate to rename the existing file before we rotate, and so the next open
+ * we do should result in a file create.
+ */
+bool rotateLogs(bool renameFiles);
+
+/** output the error # and error message with prefix.
+ handy for use as parm in uassert/massert.
+ */
+std::string errnoWithPrefix(const char* prefix);
+
+extern Tee* const warnings; // Things put here go in serverStatus
+extern Tee* const startupWarningsLog; // Things put here get reported in MMS
+
+std::string errnoWithDescription(int errorcode = -1);
+
+/**
+ * Write the current context (backtrace), along with the optional "msg".
+ */
+void logContext(const char* msg = NULL);
+
+} // namespace mongo
#endif // MONGO_UTIL_LOG_H_