diff options
Diffstat (limited to 'community/ceph17/46-fmt9-2.patch')
-rw-r--r-- | community/ceph17/46-fmt9-2.patch | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/community/ceph17/46-fmt9-2.patch b/community/ceph17/46-fmt9-2.patch new file mode 100644 index 00000000000..363211cbcbf --- /dev/null +++ b/community/ceph17/46-fmt9-2.patch @@ -0,0 +1,107 @@ +Patch-Source: https://github.com/ceph/ceph/commit/c0a3d46029757863e6c4b7c317ed31236b8c1345 +From c0a3d46029757863e6c4b7c317ed31236b8c1345 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E8=83=A1=E7=8E=AE=E6=96=87?= <huww98@outlook.com> +Date: Wed, 22 Dec 2021 01:46:32 +0800 +Subject: [PATCH] mon: use fmt::format for stderr cluster logging +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Just like 8e78ca5f958 but for mon cluster log. + +Signed-off-by: 胡玮文 <huww98@outlook.com> +--- + src/mon/LogMonitor.cc | 26 ++++++++++++++------------ + src/mon/LogMonitor.h | 2 +- + 2 files changed, 15 insertions(+), 13 deletions(-) + +diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc +index 094ea54b65247..e6d1029a1f7b3 100644 +--- a/src/mon/LogMonitor.cc ++++ b/src/mon/LogMonitor.cc +@@ -42,6 +42,7 @@ + + #include <boost/algorithm/string/predicate.hpp> + ++#include <iterator> + #include <sstream> + #include <syslog.h> + +@@ -354,10 +355,6 @@ void LogMonitor::log_external(const LogEntry& le) + channel = CLOG_CHANNEL_CLUSTER; + } + +- if (g_conf().get_val<bool>("mon_cluster_log_to_stderr")) { +- cerr << channel << " " << le << std::endl; +- } +- + if (channels.do_log_to_syslog(channel)) { + string level = channels.get_level(channel); + string facility = channels.get_facility(channel); +@@ -386,21 +383,19 @@ void LogMonitor::log_external(const LogEntry& le) + dout(7) << "journald: " << channel << dendl; + } + ++ bool do_stderr = g_conf().get_val<bool>("mon_cluster_log_to_stderr"); ++ int fd = -1; + if (g_conf()->mon_cluster_log_to_file) { + if (this->log_rotated.exchange(false)) { + this->log_external_close_fds(); + } + + auto p = channel_fds.find(channel); +- int fd; + if (p == channel_fds.end()) { + string log_file = channels.get_log_file(channel); + dout(20) << __func__ << " logging for channel '" << channel + << "' to file '" << log_file << "'" << dendl; +- if (log_file.empty()) { +- // do not log this channel +- fd = -1; +- } else { ++ if (!log_file.empty()) { + fd = ::open(log_file.c_str(), O_WRONLY|O_APPEND|O_CREAT|O_CLOEXEC, 0600); + if (fd < 0) { + int err = -errno; +@@ -413,11 +408,12 @@ void LogMonitor::log_external(const LogEntry& le) + } else { + fd = p->second; + } ++ } ++ if (do_stderr || fd >= 0) { ++ fmt::format_to(std::back_inserter(log_buffer), "{}\n", le); + + if (fd >= 0) { +- fmt::format_to(std::back_inserter(file_log_buffer), "{}\n", le); +- int err = safe_write(fd, file_log_buffer.data(), file_log_buffer.size()); +- file_log_buffer.clear(); ++ int err = safe_write(fd, log_buffer.data(), log_buffer.size()); + if (err < 0) { + dout(1) << "error writing to '" << channels.get_log_file(channel) + << "' for channel '" << channel +@@ -426,6 +422,12 @@ void LogMonitor::log_external(const LogEntry& le) + channel_fds.erase(channel); + } + } ++ ++ if (do_stderr) { ++ fmt::print(std::cerr, "{} {}", channel, std::string_view(log_buffer.data(), log_buffer.size())); ++ } ++ ++ log_buffer.clear(); + } + } + +diff --git a/src/mon/LogMonitor.h b/src/mon/LogMonitor.h +index f6b433096e45a..1eccaa5c20379 100644 +--- a/src/mon/LogMonitor.h ++++ b/src/mon/LogMonitor.h +@@ -51,7 +51,7 @@ class LogMonitor : public PaxosService, + version_t external_log_to = 0; + std::map<std::string, int> channel_fds; + +- fmt::memory_buffer file_log_buffer; ++ fmt::memory_buffer log_buffer; + std::atomic<bool> log_rotated = false; + + struct log_channel_info { |