12#ifndef SD_JOURNAL_SUPPRESS_LOCATION
13#define SD_JOURNAL_SUPPRESS_LOCATION
15#include <systemd/sd-journal.h>
25 template <
typename Mutex>
29 systemd_sink(std::string ident =
"",
bool enable_formatting =
false)
49 bool enable_formatting_ =
false;
58 if (enable_formatting_)
68 size_t length = payload.size();
70 if (length >
static_cast<size_t>(std::numeric_limits<int>::max()))
72 length =
static_cast<size_t>(std::numeric_limits<int>::max());
81 err = (sd_journal_send)(
"MESSAGE=%.*s",
static_cast<int>(length), payload.data(),
"PRIORITY=%d", syslog_level(msg.
level),
82#ifndef SPDLOG_NO_THREAD_ID
83 "TID=%zu", os::thread_id(),
85 "SYSLOG_IDENTIFIER=%.*s",
static_cast<int>(syslog_identifier.size()), syslog_identifier.data(),
nullptr);
89 err = (sd_journal_send)(
"MESSAGE=%.*s",
static_cast<int>(length), payload.data(),
"PRIORITY=%d", syslog_level(msg.
level),
90#ifndef SPDLOG_NO_THREAD_ID
91 "TID=%zu", os::thread_id(),
93 "SYSLOG_IDENTIFIER=%.*s",
static_cast<int>(syslog_identifier.size()), syslog_identifier.data(),
"CODE_FILE=%s",
105 return syslog_levels_.at(
static_cast<levels_array::size_type
>(l));
118 template <
typename Factory = spdlog::synchronous_factory>
120 const std::string& logger_name,
const std::string& ident =
"",
bool enable_formatting =
false)
122 return Factory::template create<sinks::systemd_sink_mt>(logger_name, ident, enable_formatting);
125 template <
typename Factory = spdlog::synchronous_factory>
127 const std::string& logger_name,
const std::string& ident =
"",
bool enable_formatting =
false)
129 return Factory::template create<sinks::systemd_sink_st>(logger_name, ident, enable_formatting);
Definition base_sink.h:22
Definition systemd_sink.h:27
void flush_() override
Definition systemd_sink.h:108
levels_array syslog_levels_
Definition systemd_sink.h:51
int syslog_level(level::level_enum l)
Definition systemd_sink.h:103
~systemd_sink() override
Definition systemd_sink.h:40
const std::string ident_
Definition systemd_sink.h:48
systemd_sink(std::string ident="", bool enable_formatting=false)
Definition systemd_sink.h:29
void sink_it_(const details::log_msg &msg) override
Definition systemd_sink.h:53
std::array< int, 7 > levels_array
Definition systemd_sink.h:50
systemd_sink(const systemd_sink &)=delete
systemd_sink & operator=(const systemd_sink &)=delete
bool enable_formatting_
Definition systemd_sink.h:49
level_enum
Definition common.h:233
systemd_sink< std::mutex > systemd_sink_mt
Definition systemd_sink.h:113
systemd_sink< details::null_mutex > systemd_sink_st
Definition systemd_sink.h:114
std::shared_ptr< logger > systemd_logger_mt(const std::string &logger_name, const std::string &ident="", bool enable_formatting=false)
Definition systemd_sink.h:119
std::shared_ptr< logger > systemd_logger_st(const std::string &logger_name, const std::string &ident="", bool enable_formatting=false)
Definition systemd_sink.h:126
fmt::basic_string_view< char > string_view_t
Definition common.h:172
SPDLOG_INLINE void throw_spdlog_ex(const std::string &msg, int last_errno)
Definition common-inl.h:75
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:173
string_view_t payload
Definition log_msg.h:32
level::level_enum level
Definition log_msg.h:23
source_loc source
Definition log_msg.h:31
string_view_t logger_name
Definition log_msg.h:22
int line
Definition common.h:324
const char * funcname
Definition common.h:325
SPDLOG_CONSTEXPR bool empty() const SPDLOG_NOEXCEPT
Definition common.h:319
const char * filename
Definition common.h:323