diff options
author | Billy Donahue <billy.donahue@mongodb.com> | 2022-05-04 22:21:50 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-05-04 23:17:39 +0000 |
commit | 1634edc01f2fc41d1a4e61f3802c5cec90e0e793 (patch) | |
tree | d024d99b723c5055ff6fe527ffa706ac2a8912b8 /src/mongo/logv2 | |
parent | 25c0fbade9ec93a3c5458fc5c7d2481adad064c7 (diff) | |
download | mongo-1634edc01f2fc41d1a4e61f3802c5cec90e0e793.tar.gz |
SERVER-52604 normalize log.h inclusion semantics
Diffstat (limited to 'src/mongo/logv2')
-rw-r--r-- | src/mongo/logv2/log.h | 211 |
1 files changed, 92 insertions, 119 deletions
diff --git a/src/mongo/logv2/log.h b/src/mongo/logv2/log.h index 27e8f9f52fe..d887e6ea351 100644 --- a/src/mongo/logv2/log.h +++ b/src/mongo/logv2/log.h @@ -27,22 +27,7 @@ * it in the license file. */ -// #pragma once is not used in this header. -// This header attempts to enforce the rule that no logging should be done in -// an inline function defined in a header. -// To enforce this "no logging in header" rule, we use #include guards with a validating #else -// clause. -// Also, this header relies on a preprocessor macro to determine the default component for the -// unconditional logging functions severe(), error(), warning() and log(). Disallowing multiple -// inclusion of log.h will ensure that the default component will be set correctly. - -#if defined(MONGO_UTIL_LOGV2_H_) -#error \ - "mongo/logv2/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_LOGV2_H_ -#define MONGO_UTIL_LOGV2_H_ +#pragma once #include "mongo/base/status.h" #include "mongo/bson/util/builder.h" @@ -56,26 +41,16 @@ #include "mongo/logv2/redaction.h" #include "mongo/util/errno_util.h" -namespace { -#if defined(MONGO_LOGV2_DEFAULT_COMPONENT) -// Provide log component in global scope so that MONGO_LOG will always have a valid component. -// Global log component will be kDefault unless overridden by MONGO_LOGV2_DEFAULT_COMPONENT. -const mongo::logv2::LogComponent MongoLogV2DefaultComponent_component = - MONGO_LOGV2_DEFAULT_COMPONENT; -#else -#error \ - "mongo/logv2/log.h requires MONGO_LOGV2_DEFAULT_COMPONENT to be defined. " \ - "Please see https://github.com/mongodb/mongo/blob/master/docs/logging.md " -#endif // MONGO_LOGV2_DEFAULT_COMPONENT -} // namespace - // The logging macros below are documented in detail under docs/logging.md -namespace mongo { -// Internal helper to be able to create LogOptions with two arguments from other macros -#define MAKE_OPTIONS_ARG2(ARG0, ARG1) \ - ::mongo::logv2::LogOptions { \ - ARG0, ARG1 \ - } +// +// They all (except LOGV2_IMPL) require a `MONGO_LOGV2_DEFAULT_COMPONENT` macro. +// This configuration macro must expand at their point of use to a +// `LogComponent` expression. For example: +// +// #define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kDefault +// +// LOGV2(1234500, "Something interesting happened"); +// // Internal helper to perform the logging where it requires the MESSAGE to be a compile time string. #define LOGV2_IMPL(ID, SEVERITY, OPTIONS, FMTSTR_MESSAGE, ...) \ @@ -98,11 +73,11 @@ namespace mongo { * DYNAMIC_ATTRIBUTES single argument DynamicAttributes object * no attributes may be passed with "name"_attr=value when this is used */ -#define LOGV2(ID, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Log(), \ - ::mongo::logv2::LogOptions{MongoLogV2DefaultComponent_component}, \ - FMTSTR_MESSAGE, \ +#define LOGV2(ID, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL(ID, \ + ::mongo::logv2::LogSeverity::Log(), \ + ::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT}, \ + FMTSTR_MESSAGE, \ ##__VA_ARGS__) /** @@ -113,24 +88,24 @@ namespace mongo { * * See LOGV2() for documentation of the other parameters */ -#define LOGV2_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Log(), \ - ::mongo::logv2::LogOptions::ensureValidComponent( \ - OPTIONS, MongoLogV2DefaultComponent_component), \ - FMTSTR_MESSAGE, \ - ##__VA_ARGS__) +#define LOGV2_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL( \ + ID, \ + ::mongo::logv2::LogSeverity::Log(), \ + ::mongo::logv2::LogOptions::ensureValidComponent(OPTIONS, MONGO_LOGV2_DEFAULT_COMPONENT), \ + FMTSTR_MESSAGE, \ + ##__VA_ARGS__) /** * Log with info severity. * * See LOGV2() for documentation of the parameters */ -#define LOGV2_INFO(ID, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Info(), \ - ::mongo::logv2::LogOptions{MongoLogV2DefaultComponent_component}, \ - FMTSTR_MESSAGE, \ +#define LOGV2_INFO(ID, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL(ID, \ + ::mongo::logv2::LogSeverity::Info(), \ + ::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT}, \ + FMTSTR_MESSAGE, \ ##__VA_ARGS__) /** @@ -138,24 +113,24 @@ namespace mongo { * * See LOGV2_OPTIONS() for documentation of the parameters */ -#define LOGV2_INFO_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Info(), \ - ::mongo::logv2::LogOptions::ensureValidComponent( \ - OPTIONS, MongoLogV2DefaultComponent_component), \ - FMTSTR_MESSAGE, \ - ##__VA_ARGS__) +#define LOGV2_INFO_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL( \ + ID, \ + ::mongo::logv2::LogSeverity::Info(), \ + ::mongo::logv2::LogOptions::ensureValidComponent(OPTIONS, MONGO_LOGV2_DEFAULT_COMPONENT), \ + FMTSTR_MESSAGE, \ + ##__VA_ARGS__) /** * Log with warning severity. * * See LOGV2() for documentation of the parameters */ -#define LOGV2_WARNING(ID, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Warning(), \ - ::mongo::logv2::LogOptions{MongoLogV2DefaultComponent_component}, \ - FMTSTR_MESSAGE, \ +#define LOGV2_WARNING(ID, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL(ID, \ + ::mongo::logv2::LogSeverity::Warning(), \ + ::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT}, \ + FMTSTR_MESSAGE, \ ##__VA_ARGS__) /** @@ -163,24 +138,24 @@ namespace mongo { * * See LOGV2_OPTIONS() for documentation of the parameters */ -#define LOGV2_WARNING_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Warning(), \ - ::mongo::logv2::LogOptions::ensureValidComponent( \ - OPTIONS, MongoLogV2DefaultComponent_component), \ - FMTSTR_MESSAGE, \ - ##__VA_ARGS__) +#define LOGV2_WARNING_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL( \ + ID, \ + ::mongo::logv2::LogSeverity::Warning(), \ + ::mongo::logv2::LogOptions::ensureValidComponent(OPTIONS, MONGO_LOGV2_DEFAULT_COMPONENT), \ + FMTSTR_MESSAGE, \ + ##__VA_ARGS__) /** * Log with error severity. * * See LOGV2() for documentation of the parameters */ -#define LOGV2_ERROR(ID, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Error(), \ - ::mongo::logv2::LogOptions{MongoLogV2DefaultComponent_component}, \ - FMTSTR_MESSAGE, \ +#define LOGV2_ERROR(ID, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL(ID, \ + ::mongo::logv2::LogSeverity::Error(), \ + ::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT}, \ + FMTSTR_MESSAGE, \ ##__VA_ARGS__) /** @@ -188,27 +163,27 @@ namespace mongo { * * See LOGV2_OPTIONS() for documentation of the parameters */ -#define LOGV2_ERROR_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Error(), \ - ::mongo::logv2::LogOptions::ensureValidComponent( \ - OPTIONS, MongoLogV2DefaultComponent_component), \ - FMTSTR_MESSAGE, \ - ##__VA_ARGS__) +#define LOGV2_ERROR_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL( \ + ID, \ + ::mongo::logv2::LogSeverity::Error(), \ + ::mongo::logv2::LogOptions::ensureValidComponent(OPTIONS, MONGO_LOGV2_DEFAULT_COMPONENT), \ + FMTSTR_MESSAGE, \ + ##__VA_ARGS__) /** * Log with fatal severity. fassertFailed(ID) will be performed after writing the log * * See LOGV2() for documentation of the parameters */ -#define LOGV2_FATAL(ID, FMTSTR_MESSAGE, ...) \ - do { \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Severe(), \ - ::mongo::logv2::LogOptions{MongoLogV2DefaultComponent_component}, \ - FMTSTR_MESSAGE, \ - ##__VA_ARGS__); \ - fassertFailed(ID); \ +#define LOGV2_FATAL(ID, FMTSTR_MESSAGE, ...) \ + do { \ + LOGV2_IMPL(ID, \ + ::mongo::logv2::LogSeverity::Severe(), \ + ::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT}, \ + FMTSTR_MESSAGE, \ + ##__VA_ARGS__); \ + fassertFailed(ID); \ } while (false) /** @@ -216,15 +191,15 @@ namespace mongo { * * See LOGV2() for documentation of the parameters */ -#define LOGV2_FATAL_NOTRACE(ID, FMTSTR_MESSAGE, ...) \ - do { \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Severe(), \ - MAKE_OPTIONS_ARG2(MongoLogV2DefaultComponent_component, \ - ::mongo::logv2::FatalMode::kAssertNoTrace), \ - FMTSTR_MESSAGE, \ - ##__VA_ARGS__); \ - fassertFailedNoTrace(ID); \ +#define LOGV2_FATAL_NOTRACE(ID, FMTSTR_MESSAGE, ...) \ + do { \ + LOGV2_IMPL(ID, \ + ::mongo::logv2::LogSeverity::Severe(), \ + (::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT, \ + ::mongo::logv2::FatalMode::kAssertNoTrace}), \ + FMTSTR_MESSAGE, \ + ##__VA_ARGS__); \ + fassertFailedNoTrace(ID); \ } while (false) /** @@ -232,12 +207,12 @@ namespace mongo { * * See LOGV2() for documentation of the parameters */ -#define LOGV2_FATAL_CONTINUE(ID, FMTSTR_MESSAGE, ...) \ - LOGV2_IMPL(ID, \ - ::mongo::logv2::LogSeverity::Severe(), \ - MAKE_OPTIONS_ARG2(MongoLogV2DefaultComponent_component, \ - ::mongo::logv2::FatalMode::kContinue), \ - FMTSTR_MESSAGE, \ +#define LOGV2_FATAL_CONTINUE(ID, FMTSTR_MESSAGE, ...) \ + LOGV2_IMPL(ID, \ + ::mongo::logv2::LogSeverity::Severe(), \ + (::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT, \ + ::mongo::logv2::FatalMode::kContinue}), \ + FMTSTR_MESSAGE, \ ##__VA_ARGS__) /** @@ -250,7 +225,7 @@ namespace mongo { #define LOGV2_FATAL_OPTIONS(ID, OPTIONS, FMTSTR_MESSAGE, ...) \ do { \ auto optionsMacroLocal_ = ::mongo::logv2::LogOptions::ensureValidComponent( \ - OPTIONS, MongoLogV2DefaultComponent_component); \ + OPTIONS, MONGO_LOGV2_DEFAULT_COMPONENT); \ LOGV2_IMPL(ID, \ ::mongo::logv2::LogSeverity::Severe(), \ optionsMacroLocal_, \ @@ -277,7 +252,7 @@ namespace mongo { do { \ auto severityMacroLocal_ = ::mongo::logv2::LogSeverity::Debug(DLEVEL); \ auto optionsMacroLocal_ = ::mongo::logv2::LogOptions::ensureValidComponent( \ - OPTIONS, MongoLogV2DefaultComponent_component); \ + OPTIONS, MONGO_LOGV2_DEFAULT_COMPONENT); \ if (::mongo::logv2::LogManager::global().getGlobalSettings().shouldLog( \ optionsMacroLocal_.component(), severityMacroLocal_)) { \ LOGV2_IMPL( \ @@ -292,17 +267,15 @@ namespace mongo { * * See LOGV2() for documentation of the other parameters */ -#define LOGV2_DEBUG(ID, DLEVEL, FMTSTR_MESSAGE, ...) \ - LOGV2_DEBUG_OPTIONS(ID, \ - DLEVEL, \ - ::mongo::logv2::LogOptions{MongoLogV2DefaultComponent_component}, \ - FMTSTR_MESSAGE, \ +#define LOGV2_DEBUG(ID, DLEVEL, FMTSTR_MESSAGE, ...) \ + LOGV2_DEBUG_OPTIONS(ID, \ + DLEVEL, \ + ::mongo::logv2::LogOptions{MONGO_LOGV2_DEFAULT_COMPONENT}, \ + FMTSTR_MESSAGE, \ ##__VA_ARGS__) -inline bool shouldLog(logv2::LogComponent logComponent, logv2::LogSeverity severity) { - return logv2::LogManager::global().getGlobalSettings().shouldLog(logComponent, severity); +namespace mongo::logv2 { +inline bool shouldLog(LogComponent logComponent, LogSeverity severity) { + return LogManager::global().getGlobalSettings().shouldLog(logComponent, severity); } - -} // namespace mongo - -#endif // MONGO_UTIL_LOGV2_H_ +} // namespace mongo::logv2 |