parent
f0fcc73f92
commit
e68cf1c9ed
@ -13,16 +13,15 @@ namespace spdlog {
|
|||||||
namespace sinks {
|
namespace sinks {
|
||||||
/**
|
/**
|
||||||
* Sink that write to syslog using the `syscall()` library call.
|
* Sink that write to syslog using the `syscall()` library call.
|
||||||
*
|
|
||||||
* Locking is not needed, as `syslog()` itself is thread-safe.
|
|
||||||
*/
|
*/
|
||||||
template<typename Mutex>
|
template<typename Mutex>
|
||||||
class syslog_sink : public base_sink<Mutex>
|
class syslog_sink : public base_sink<Mutex>
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//
|
syslog_sink(std::string ident, int syslog_option, int syslog_facility, bool enable_formatting):
|
||||||
explicit syslog_sink(std::string ident = "", int syslog_option = 0, int syslog_facility = LOG_USER)
|
enable_formatting_{enable_formatting},
|
||||||
: ident_(std::move(ident))
|
ident_{std::move(ident)}
|
||||||
{
|
{
|
||||||
priorities_[static_cast<size_t>(level::trace)] = LOG_DEBUG;
|
priorities_[static_cast<size_t>(level::trace)] = LOG_DEBUG;
|
||||||
priorities_[static_cast<size_t>(level::debug)] = LOG_DEBUG;
|
priorities_[static_cast<size_t>(level::debug)] = LOG_DEBUG;
|
||||||
@ -47,10 +46,24 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void sink_it_(const details::log_msg &msg) override
|
void sink_it_(const details::log_msg &msg) override
|
||||||
{
|
{
|
||||||
::syslog(syslog_prio_from_level(msg), "%s", fmt::to_string(msg.payload).c_str());
|
string_view_t payload;
|
||||||
|
|
||||||
|
if(enable_formatting_)
|
||||||
|
{
|
||||||
|
fmt::memory_buffer formatted;
|
||||||
|
sink::formatter_->format(msg, formatted);
|
||||||
|
payload = string_view_t(formatted.data(), formatted.size());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
payload = msg.payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
::syslog(syslog_prio_from_level(msg), "%s", payload.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void flush_() override {}
|
void flush_() override {}
|
||||||
|
bool enable_formatting_ = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::array<int, 7> priorities_;
|
std::array<int, 7> priorities_;
|
||||||
@ -74,15 +87,23 @@ using syslog_sink_st = syslog_sink<details::null_mutex>;
|
|||||||
// Create and register a syslog logger
|
// Create and register a syslog logger
|
||||||
template<typename Factory = default_factory>
|
template<typename Factory = default_factory>
|
||||||
inline std::shared_ptr<logger> syslog_logger_mt(
|
inline std::shared_ptr<logger> syslog_logger_mt(
|
||||||
const std::string &logger_name, const std::string &syslog_ident = "", int syslog_option = 0, int syslog_facility = (1 << 3))
|
const std::string &logger_name,
|
||||||
|
const std::string &syslog_ident = "",
|
||||||
|
int syslog_option = 0,
|
||||||
|
int syslog_facility = LOG_USER,
|
||||||
|
bool enable_formatting = false)
|
||||||
{
|
{
|
||||||
return Factory::template create<sinks::syslog_sink_mt>(logger_name, syslog_ident, syslog_option, syslog_facility);
|
return Factory::template create<sinks::syslog_sink_mt>(logger_name, syslog_ident, syslog_option, syslog_facility, enable_formatting);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Factory = default_factory>
|
template<typename Factory = default_factory>
|
||||||
inline std::shared_ptr<logger> syslog_logger_st(
|
inline std::shared_ptr<logger> syslog_logger_st(
|
||||||
const std::string &logger_name, const std::string &syslog_ident = "", int syslog_option = 0, int syslog_facility = (1 << 3))
|
const std::string &logger_name,
|
||||||
|
const std::string &syslog_ident = "",
|
||||||
|
int syslog_option = 0,
|
||||||
|
int syslog_facility = LOG_USER,
|
||||||
|
bool enable_formatting = false)
|
||||||
{
|
{
|
||||||
return Factory::template create<sinks::syslog_sink_st>(logger_name, syslog_ident, syslog_option, syslog_facility);
|
return Factory::template create<sinks::syslog_sink_st>(logger_name, syslog_ident, syslog_option, syslog_facility, enable_formatting);
|
||||||
}
|
}
|
||||||
} // namespace spdlog
|
} // namespace spdlog
|
||||||
|
Loading…
Reference in New Issue
Block a user