summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/logv2/log_tag.h11
-rw-r--r--src/mongo/shell/dbshell.cpp7
-rw-r--r--src/mongo/shell/shell_utils_launcher.cpp10
3 files changed, 23 insertions, 5 deletions
diff --git a/src/mongo/logv2/log_tag.h b/src/mongo/logv2/log_tag.h
index f0112d5f8fe..f88a66a60b2 100644
--- a/src/mongo/logv2/log_tag.h
+++ b/src/mongo/logv2/log_tag.h
@@ -49,8 +49,18 @@ public:
// representing the logv1 plainShellOutput domain
kPlainShell = 1 << 2,
+
+ // allow logging while the shell is waiting for user input
+ kAllowDuringPromptingShell = 1 << 3,
};
+ friend Value operator|(Value a, Value b) {
+ return static_cast<Value>(static_cast<uint64_t>(a) | static_cast<uint64_t>(b));
+ }
+ friend Value operator&(Value a, Value b) {
+ return static_cast<Value>(static_cast<uint64_t>(a) & static_cast<uint64_t>(b));
+ }
+
LogTag() : _value(kNone) {}
/* implicit */ LogTag(Value value) {
_value = static_cast<uint64_t>(value);
@@ -69,5 +79,6 @@ public:
private:
uint64_t _value;
};
+
} // namespace logv2
} // namespace mongo
diff --git a/src/mongo/shell/dbshell.cpp b/src/mongo/shell/dbshell.cpp
index 1c73f3dca4f..456faf068ad 100644
--- a/src/mongo/shell/dbshell.cpp
+++ b/src/mongo/shell/dbshell.cpp
@@ -185,8 +185,13 @@ private:
class ShellBackend final : public boost::log::sinks::text_ostream_backend {
public:
void consume(boost::log::record_view const& rec, string_type const& formatted_message) {
+ using boost::log::extract;
+
auto lk = stdx::lock_guard(ShellConsoleAppender::mx);
- if (!ShellConsoleAppender::loggingEnabled)
+ if (!ShellConsoleAppender::loggingEnabled &&
+ !extract<logv2::LogTag>(logv2::attributes::tags(), rec)
+ .get()
+ .has(logv2::LogTag::kAllowDuringPromptingShell))
return;
boost::log::sinks::text_ostream_backend::consume(rec, formatted_message);
}
diff --git a/src/mongo/shell/shell_utils_launcher.cpp b/src/mongo/shell/shell_utils_launcher.cpp
index f9025622ba7..25a74af74ce 100644
--- a/src/mongo/shell/shell_utils_launcher.cpp
+++ b/src/mongo/shell/shell_utils_launcher.cpp
@@ -251,10 +251,12 @@ void ProgramOutputMultiplexer::appendLine(int port,
std::ostringstream ss;
sinkProgramOutput(_buffer);
sinkProgramOutput(ss);
- LOGV2_OPTIONS(4615640,
- logv2::LogOptions(logv2::LogTag::kPlainShell, logv2::LogTruncation::Disabled),
- "{message}",
- "message"_attr = ss.str());
+ LOGV2_OPTIONS(
+ 4615640,
+ logv2::LogOptions(logv2::LogTag::kPlainShell | logv2::LogTag::kAllowDuringPromptingShell,
+ logv2::LogTruncation::Disabled),
+ "{message}",
+ "message"_attr = ss.str());
}
string ProgramOutputMultiplexer::str() const {