diff options
Diffstat (limited to 'src/mongo/util/log.h')
-rw-r--r-- | src/mongo/util/log.h | 283 |
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_ |