From 36b4b9dac9204795a1526ae8d6f76f15fa160556 Mon Sep 17 00:00:00 2001 From: Delgan Date: Fri, 1 Apr 2022 23:16:21 +0200 Subject: [PATCH] Add optional "ident" argument to systemd sink constructor --- include/spdlog/sinks/systemd_sink.h | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/include/spdlog/sinks/systemd_sink.h b/include/spdlog/sinks/systemd_sink.h index d61c4989..e1e97bff 100644 --- a/include/spdlog/sinks/systemd_sink.h +++ b/include/spdlog/sinks/systemd_sink.h @@ -23,8 +23,9 @@ template class systemd_sink : public base_sink { public: - explicit systemd_sink(bool enable_formatting = false) - : enable_formatting_{enable_formatting} + systemd_sink(std::string ident = "", bool enable_formatting = false) + : ident_{std::move(ident)} + , enable_formatting_{enable_formatting} , syslog_levels_{{/* spdlog::level::trace */ LOG_DEBUG, /* spdlog::level::debug */ LOG_DEBUG, /* spdlog::level::info */ LOG_INFO, @@ -40,6 +41,7 @@ public: systemd_sink &operator=(const systemd_sink &) = delete; protected: + const std::string ident_; bool enable_formatting_ = false; using levels_array = std::array; levels_array syslog_levels_; @@ -66,17 +68,19 @@ protected: length = static_cast(std::numeric_limits::max()); } + const string_view_t syslog_identifier = ident_.empty() ? msg.logger_name : ident_; + // Do not send source location if not available if (msg.source.empty()) { // Note: function call inside '()' to avoid macro expansion err = (sd_journal_send)("MESSAGE=%.*s", static_cast(length), payload.data(), "PRIORITY=%d", syslog_level(msg.level), - "SYSLOG_IDENTIFIER=%.*s", static_cast(msg.logger_name.size()), msg.logger_name.data(), nullptr); + "SYSLOG_IDENTIFIER=%.*s", static_cast(syslog_identifier.size()), syslog_identifier.data(), nullptr); } else { err = (sd_journal_send)("MESSAGE=%.*s", static_cast(length), payload.data(), "PRIORITY=%d", syslog_level(msg.level), - "SYSLOG_IDENTIFIER=%.*s", static_cast(msg.logger_name.size()), msg.logger_name.data(), "CODE_FILE=%s", + "SYSLOG_IDENTIFIER=%.*s", static_cast(syslog_identifier.size()), syslog_identifier.data(), "CODE_FILE=%s", msg.source.filename, "CODE_LINE=%d", msg.source.line, "CODE_FUNC=%s", msg.source.funcname, nullptr); } @@ -100,14 +104,16 @@ using systemd_sink_st = systemd_sink; // Create and register a syslog logger template -inline std::shared_ptr systemd_logger_mt(const std::string &logger_name, bool enable_formatting = false) +inline std::shared_ptr systemd_logger_mt( + const std::string &logger_name, const std::string &ident = "", bool enable_formatting = false) { - return Factory::template create(logger_name, enable_formatting); + return Factory::template create(logger_name, ident, enable_formatting); } template -inline std::shared_ptr systemd_logger_st(const std::string &logger_name, bool enable_formatting = false) +inline std::shared_ptr systemd_logger_st( + const std::string &logger_name, const std::string &ident = "", bool enable_formatting = false) { - return Factory::template create(logger_name, enable_formatting); + return Factory::template create(logger_name, ident, enable_formatting); } } // namespace spdlog