// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. // Distributed under the MIT License (http://opensource.org/licenses/MIT) #pragma once #include #include #include #ifdef _WIN32 # include #else # include #endif #include #include #include #include // Simple udp client sink // Sends formatted log via udp namespace spdlog { namespace sinks { struct udp_sink_config { std::string server_host; uint16_t server_port; udp_sink_config(std::string host, uint16_t port) : server_host{std::move(host)} , server_port{port} {} }; template class udp_sink : public spdlog::sinks::base_sink { public: // host can be hostname or ip address explicit udp_sink(udp_sink_config sink_config) : client_{sink_config.server_host, sink_config.server_port} {} ~udp_sink() override = default; protected: void sink_it_(const spdlog::details::log_msg &msg) override { spdlog::memory_buf_t formatted; spdlog::sinks::base_sink::formatter_->format(msg, formatted); client_.send(formatted.data(), formatted.size()); } void flush_() override {} details::udp_client client_; }; using udp_sink_mt = udp_sink; using udp_sink_st = udp_sink; } // namespace sinks // // factory functions // template inline std::shared_ptr udp_logger_mt(const std::string &logger_name, sinks::udp_sink_config skin_config) { return Factory::template create(logger_name, skin_config); } } // namespace spdlog