summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Edin <henrik.edin@mongodb.com>2020-01-16 22:10:57 +0000
committerA. Jesse Jiryu Davis <jesse@mongodb.com>2020-01-27 15:40:36 -0500
commit893126f80f2a43b9f5318e23d8878d85acdba87b (patch)
treef718e100b992db16481d62cc9a31caab40522c86
parent7f5abac0250d152fc9cfa44effe45a842778b450 (diff)
downloadmongo-893126f80f2a43b9f5318e23d8878d85acdba87b.tar.gz
SERVER-45609 Allow early logging to stdout in shell when using logv2
-rw-r--r--src/mongo/shell/dbshell.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/mongo/shell/dbshell.cpp b/src/mongo/shell/dbshell.cpp
index a745cf31591..5561204f714 100644
--- a/src/mongo/shell/dbshell.cpp
+++ b/src/mongo/shell/dbshell.cpp
@@ -728,14 +728,22 @@ int _main(int argc, char* argv[], char** envp) {
setupSignalHandlers();
setupSignals();
- logger::globalLogManager()->getGlobalDomain()->clearAppenders();
- logger::globalLogManager()->getGlobalDomain()->attachAppender(
- std::make_unique<ShellConsoleAppender>(
- std::make_unique<logger::MessageEventDetailsEncoder>()));
-
+ // Log to stdout for any early logging before we re-configure the logger
auto& lv2Manager = logv2::LogManager::global();
logv2::LogDomainGlobal::ConfigurationOptions lv2Config;
- lv2Config.makeDisabled();
+ if (logV2Enabled()) {
+ logger::globalLogManager()->getGlobalDomain()->clearAppenders();
+ logger::globalLogManager()->getGlobalDomain()->attachAppender(
+ std::make_unique<logger::LogV2Appender<logger::MessageEventEphemeral>>(
+ &lv2Manager.getGlobalDomain()));
+ } else {
+ logger::globalLogManager()->getGlobalDomain()->clearAppenders();
+ logger::globalLogManager()->getGlobalDomain()->attachAppender(
+ std::make_unique<ShellConsoleAppender>(
+ std::make_unique<logger::MessageEventDetailsEncoder>()));
+
+ lv2Config.makeDisabled();
+ }
uassertStatusOK(lv2Manager.getGlobalDomainInternal().configure(lv2Config));
mongo::shell_utils::RecordMyLocation(argv[0]);
@@ -788,6 +796,11 @@ int _main(int argc, char* argv[], char** envp) {
consoleSink->locked_backend()->auto_flush();
+ // Remove the initial config from above when setting this sink, otherwise we log everything
+ // twice.
+ lv2Config.makeDisabled();
+ uassertStatusOK(lv2Manager.getGlobalDomainInternal().configure(lv2Config));
+
boost::log::core::get()->add_sink(std::move(consoleSink));
}