mirror of
				https://gitlab.alpinelinux.org/alpine/aports.git
				synced 2025-10-31 00:12:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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 {
 |