diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2018-06-27 16:59:39 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2018-06-27 16:59:39 +0200 |
commit | f1187001ebc5b9ad18d5b5992c75bd682e367b42 (patch) | |
tree | 134ca05c369ac09dd7fa5f51285cc7176d62c385 /lib/spdlog/async_logger.h | |
parent | b84c8622d092fd773888eed89f1dbffb2c3a57f7 (diff) | |
parent | 8111b77e95b083137faf888aeb5892073adf7ab4 (diff) |
Update upstream source from tag 'upstream/2.0.0'
Update to upstream version '2.0.0'
with Debian dir 112f2f2cb91158baaf8ee3a1f623980b43a258ce
Diffstat (limited to 'lib/spdlog/async_logger.h')
-rw-r--r-- | lib/spdlog/async_logger.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/spdlog/async_logger.h b/lib/spdlog/async_logger.h new file mode 100644 index 0000000..75641d2 --- /dev/null +++ b/lib/spdlog/async_logger.h @@ -0,0 +1,72 @@ +// +// Copyright(c) 2015 Gabi Melman. +// Distributed under the MIT License (http://opensource.org/licenses/MIT) +// + +#pragma once + +// Very fast asynchronous logger (millions of logs per second on an average desktop) +// Uses pre allocated lockfree queue for maximum throughput even under large number of threads. +// Creates a single back thread to pop messages from the queue and log them. +// +// Upon each log write the logger: +// 1. Checks if its log level is enough to log the message +// 2. Push a new copy of the message to a queue (or block the caller until space is available in the queue) +// 3. will throw spdlog_ex upon log exceptions +// Upon destruction, logs all remaining messages in the queue before destructing.. + +#include "common.h" +#include "logger.h" + +#include <chrono> +#include <functional> +#include <memory> +#include <string> + +namespace spdlog { + +namespace details { +class async_log_helper; +} + +class async_logger SPDLOG_FINAL : public logger +{ +public: + template<class It> + async_logger(const std::string &logger_name, const It &begin, const It &end, size_t queue_size, + const async_overflow_policy overflow_policy = async_overflow_policy::block_retry, + const std::function<void()> &worker_warmup_cb = nullptr, + const std::chrono::milliseconds &flush_interval_ms = std::chrono::milliseconds::zero(), + const std::function<void()> &worker_teardown_cb = nullptr); + + async_logger(const std::string &logger_name, sinks_init_list sinks, size_t queue_size, + const async_overflow_policy overflow_policy = async_overflow_policy::block_retry, + const std::function<void()> &worker_warmup_cb = nullptr, + const std::chrono::milliseconds &flush_interval_ms = std::chrono::milliseconds::zero(), + const std::function<void()> &worker_teardown_cb = nullptr); + + async_logger(const std::string &logger_name, sink_ptr single_sink, size_t queue_size, + const async_overflow_policy overflow_policy = async_overflow_policy::block_retry, + const std::function<void()> &worker_warmup_cb = nullptr, + const std::chrono::milliseconds &flush_interval_ms = std::chrono::milliseconds::zero(), + const std::function<void()> &worker_teardown_cb = nullptr); + + // Wait for the queue to be empty, and flush synchronously + // Warning: this can potentially last forever as we wait it to complete + void flush() override; + + // Error handler + void set_error_handler(log_err_handler) override; + log_err_handler error_handler() override; + +protected: + void _sink_it(details::log_msg &msg) override; + void _set_formatter(spdlog::formatter_ptr msg_formatter) override; + void _set_pattern(const std::string &pattern, pattern_time_type pattern_time) override; + +private: + std::unique_ptr<details::async_log_helper> _async_log_helper; +}; +} // namespace spdlog + +#include "details/async_logger_impl.h" |