From: 胡玮文 Date: Wed, 12 May 2021 01:58:23 +0000 (+0800) Subject: common: send SYSLOG_IDENTIFIER to journald X-Git-Tag: v17.1.0~1938^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c17f5e152aabb96dea852e10632c051e69f6ecb8;p=ceph.git common: send SYSLOG_IDENTIFIER to journald Follow libsystemd, and avoid requiring journald to look it up every time forwarding logs to syslog. Signed-off-by: 胡玮文 --- diff --git a/src/common/Journald.cc b/src/common/Journald.cc index ba3a84c06c52..590030e386de 100644 --- a/src/common/Journald.cc +++ b/src/common/Journald.cc @@ -72,9 +72,17 @@ class EntryEncoderBase { public: EntryEncoderBase(): m_msg_vec { - {}, {}, { (char *)"\n", 1 }, - } + {}, {}, {}, { (char *)"\n", 1 }, + } { + std::string id = program_invocation_short_name; + for (auto& c : id) { + if (c == '\n') + c = '_'; + } + static_segment = "SYSLOG_IDENTIFIER=" + id + "\n"; + m_msg_vec[0].iov_base = static_segment.data(); + m_msg_vec[0].iov_len = static_segment.size(); } constexpr struct iovec *iovec() { return this->m_msg_vec; } @@ -83,9 +91,15 @@ class EntryEncoderBase { return sizeof(m_msg_vec) / sizeof(m_msg_vec[0]); } + private: + struct iovec m_msg_vec[4]; + std::string static_segment; + protected: fmt::memory_buffer meta_buf; - struct iovec m_msg_vec[3]; + + struct iovec &meta_vec() { return m_msg_vec[1]; } + struct iovec &msg_vec() { return m_msg_vec[2]; } }; class EntryEncoder : public EntryEncoderBase { @@ -111,11 +125,11 @@ MESSAGE meta_buf.resize(meta_buf.size() + sizeof(msg_len)); *(reinterpret_cast(meta_buf.end()) - 1) = htole64(e.size()); - m_msg_vec[0].iov_base = meta_buf.data(); - m_msg_vec[0].iov_len = meta_buf.size(); + meta_vec().iov_base = meta_buf.data(); + meta_vec().iov_len = meta_buf.size(); - m_msg_vec[1].iov_base = (void *)e.strv().data(); - m_msg_vec[1].iov_len = e.size(); + msg_vec().iov_base = (void *)e.strv().data(); + msg_vec().iov_len = e.size(); } }; @@ -144,11 +158,11 @@ MESSAGE meta_buf.resize(meta_buf.size() + sizeof(msg_len)); *(reinterpret_cast(meta_buf.end()) - 1) = htole64(le.msg.size()); - m_msg_vec[0].iov_base = meta_buf.data(); - m_msg_vec[0].iov_len = meta_buf.size(); + meta_vec().iov_base = meta_buf.data(); + meta_vec().iov_len = meta_buf.size(); - m_msg_vec[1].iov_base = (void *)le.msg.data(); - m_msg_vec[1].iov_len = le.msg.size(); + msg_vec().iov_base = (void *)le.msg.data(); + msg_vec().iov_len = le.msg.size(); } };