diff options
Diffstat (limited to 'matching/include/spdlog/sinks')
-rw-r--r-- | matching/include/spdlog/sinks/android_sink.h | 121 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/ansicolor_sink.h | 161 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/base_sink.h | 69 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/basic_file_sink.h | 75 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/daily_file_sink.h | 141 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/dist_sink.h | 94 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/msvc_sink.h | 54 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/null_sink.h | 49 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/ostream_sink.h | 57 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/rotating_file_sink.h | 164 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/sink.h | 59 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/stdout_color_sinks.h | 56 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/stdout_sinks.h | 102 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/syslog_sink.h | 94 | ||||
-rw-r--r-- | matching/include/spdlog/sinks/wincolor_sink.h | 143 |
15 files changed, 0 insertions, 1439 deletions
diff --git a/matching/include/spdlog/sinks/android_sink.h b/matching/include/spdlog/sinks/android_sink.h deleted file mode 100644 index ae7f773..0000000 --- a/matching/include/spdlog/sinks/android_sink.h +++ /dev/null @@ -1,121 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/fmt_helper.h" -#include "spdlog/details/null_mutex.h" -#include "spdlog/details/os.h" -#include "spdlog/sinks/base_sink.h" - -#include <android/log.h> -#include <chrono> -#include <mutex> -#include <string> -#include <thread> - -#if !defined(SPDLOG_ANDROID_RETRIES) -#define SPDLOG_ANDROID_RETRIES 2 -#endif - -namespace spdlog { -namespace sinks { - -/* - * Android sink (logging using __android_log_write) - */ -template<typename Mutex> -class android_sink final : public base_sink<Mutex> -{ -public: - explicit android_sink(std::string tag = "spdlog", bool use_raw_msg = false) - : tag_(std::move(tag)) - , use_raw_msg_(use_raw_msg) - { - } - -protected: - void sink_it_(const details::log_msg &msg) override - { - const android_LogPriority priority = convert_to_android_(msg.level); - fmt::memory_buffer formatted; - if (use_raw_msg_) - { - details::fmt_helper::append_string_view(msg.payload, formatted); - } - else - { - sink::formatter_->format(msg, formatted); - } - formatted.push_back('\0'); - const char *msg_output = formatted.data(); - - // See system/core/liblog/logger_write.c for explanation of return value - int ret = __android_log_write(priority, tag_.c_str(), msg_output); - int retry_count = 0; - while ((ret == -11 /*EAGAIN*/) && (retry_count < SPDLOG_ANDROID_RETRIES)) - { - details::os::sleep_for_millis(5); - ret = __android_log_write(priority, tag_.c_str(), msg_output); - retry_count++; - } - - if (ret < 0) - { - throw spdlog_ex("__android_log_write() failed", ret); - } - } - - void flush_() override {} - -private: - static android_LogPriority convert_to_android_(spdlog::level::level_enum level) - { - switch (level) - { - case spdlog::level::trace: - return ANDROID_LOG_VERBOSE; - case spdlog::level::debug: - return ANDROID_LOG_DEBUG; - case spdlog::level::info: - return ANDROID_LOG_INFO; - case spdlog::level::warn: - return ANDROID_LOG_WARN; - case spdlog::level::err: - return ANDROID_LOG_ERROR; - case spdlog::level::critical: - return ANDROID_LOG_FATAL; - default: - return ANDROID_LOG_DEFAULT; - } - } - - std::string tag_; - bool use_raw_msg_; -}; - -using android_sink_mt = android_sink<std::mutex>; -using android_sink_st = android_sink<details::null_mutex>; -} // namespace sinks - -// Create and register android syslog logger - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> android_logger_mt(const std::string &logger_name, const std::string &tag = "spdlog") -{ - return Factory::template create<sinks::android_sink_mt>(logger_name, tag); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> android_logger_st(const std::string &logger_name, const std::string &tag = "spdlog") -{ - return Factory::template create<sinks::android_sink_st>(logger_name, tag); -} - -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/ansicolor_sink.h b/matching/include/spdlog/sinks/ansicolor_sink.h deleted file mode 100644 index 7c5e353..0000000 --- a/matching/include/spdlog/sinks/ansicolor_sink.h +++ /dev/null @@ -1,161 +0,0 @@ -// -// Copyright(c) 2017 spdlog authors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/console_globals.h" -#include "spdlog/details/null_mutex.h" -#include "spdlog/details/os.h" -#include "spdlog/sinks/sink.h" - -#include <memory> -#include <mutex> -#include <string> -#include <unordered_map> - -namespace spdlog { -namespace sinks { - -/** - * This sink prefixes the output with an ANSI escape sequence color code - * depending on the severity - * of the message. - * If no color terminal detected, omit the escape codes. - */ -template<typename TargetStream, class ConsoleMutex> -class ansicolor_sink final : public sink -{ -public: - using mutex_t = typename ConsoleMutex::mutex_t; - ansicolor_sink() - : target_file_(TargetStream::stream()) - , mutex_(ConsoleMutex::mutex()) - - { - should_do_colors_ = details::os::in_terminal(target_file_) && details::os::is_color_terminal(); - colors_[level::trace] = white; - colors_[level::debug] = cyan; - colors_[level::info] = green; - colors_[level::warn] = yellow + bold; - colors_[level::err] = red + bold; - colors_[level::critical] = bold + on_red; - colors_[level::off] = reset; - } - - ~ansicolor_sink() override = default; - - ansicolor_sink(const ansicolor_sink &other) = delete; - ansicolor_sink &operator=(const ansicolor_sink &other) = delete; - - void set_color(level::level_enum color_level, const std::string &color) - { - std::lock_guard<mutex_t> lock(mutex_); - colors_[color_level] = color; - } - - /// Formatting codes - const std::string reset = "\033[m"; - const std::string bold = "\033[1m"; - const std::string dark = "\033[2m"; - const std::string underline = "\033[4m"; - const std::string blink = "\033[5m"; - const std::string reverse = "\033[7m"; - const std::string concealed = "\033[8m"; - const std::string clear_line = "\033[K"; - - // Foreground colors - const std::string black = "\033[30m"; - const std::string red = "\033[31m"; - const std::string green = "\033[32m"; - const std::string yellow = "\033[33m"; - const std::string blue = "\033[34m"; - const std::string magenta = "\033[35m"; - const std::string cyan = "\033[36m"; - const std::string white = "\033[37m"; - - /// Background colors - const std::string on_black = "\033[40m"; - const std::string on_red = "\033[41m"; - const std::string on_green = "\033[42m"; - const std::string on_yellow = "\033[43m"; - const std::string on_blue = "\033[44m"; - const std::string on_magenta = "\033[45m"; - const std::string on_cyan = "\033[46m"; - const std::string on_white = "\033[47m"; - - void log(const details::log_msg &msg) override - { - // Wrap the originally formatted message in color codes. - // If color is not supported in the terminal, log as is instead. - std::lock_guard<mutex_t> lock(mutex_); - - fmt::memory_buffer formatted; - formatter_->format(msg, formatted); - if (should_do_colors_ && msg.color_range_end > msg.color_range_start) - { - // before color range - print_range_(formatted, 0, msg.color_range_start); - // in color range - print_ccode_(colors_[msg.level]); - print_range_(formatted, msg.color_range_start, msg.color_range_end); - print_ccode_(reset); - // after color range - print_range_(formatted, msg.color_range_end, formatted.size()); - } - else // no color - { - print_range_(formatted, 0, formatted.size()); - } - fflush(target_file_); - } - - void flush() override - { - std::lock_guard<mutex_t> lock(mutex_); - fflush(target_file_); - } - - void set_pattern(const std::string &pattern) final - { - std::lock_guard<mutex_t> lock(mutex_); - formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern)); - } - - void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override - { - std::lock_guard<mutex_t> lock(mutex_); - formatter_ = std::move(sink_formatter); - } - -private: - void print_ccode_(const std::string &color_code) - { - fwrite(color_code.data(), sizeof(char), color_code.size(), target_file_); - } - void print_range_(const fmt::memory_buffer &formatted, size_t start, size_t end) - { - fwrite(formatted.data() + start, sizeof(char), end - start, target_file_); - } - - FILE *target_file_; - mutex_t &mutex_; - - bool should_do_colors_; - std::unordered_map<level::level_enum, std::string, level::level_hasher> colors_; -}; - -using ansicolor_stdout_sink_mt = ansicolor_sink<details::console_stdout, details::console_mutex>; -using ansicolor_stdout_sink_st = ansicolor_sink<details::console_stdout, details::console_nullmutex>; - -using ansicolor_stderr_sink_mt = ansicolor_sink<details::console_stderr, details::console_mutex>; -using ansicolor_stderr_sink_st = ansicolor_sink<details::console_stderr, details::console_nullmutex>; - -} // namespace sinks - -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/base_sink.h b/matching/include/spdlog/sinks/base_sink.h deleted file mode 100644 index 2259518..0000000 --- a/matching/include/spdlog/sinks/base_sink.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once -// -// base sink templated over a mutex (either dummy or real) -// concrete implementation should override the sink_it_() and flush_() methods. -// locking is taken care of in this class - no locking needed by the -// implementers.. -// - -#include "spdlog/common.h" -#include "spdlog/details/log_msg.h" -#include "spdlog/formatter.h" -#include "spdlog/sinks/sink.h" - -namespace spdlog { -namespace sinks { -template<typename Mutex> -class base_sink : public sink -{ -public: - base_sink() = default; - base_sink(const base_sink &) = delete; - base_sink &operator=(const base_sink &) = delete; - - void log(const details::log_msg &msg) final - { - std::lock_guard<Mutex> lock(mutex_); - sink_it_(msg); - } - - void flush() final - { - std::lock_guard<Mutex> lock(mutex_); - flush_(); - } - - void set_pattern(const std::string &pattern) final - { - std::lock_guard<Mutex> lock(mutex_); - set_pattern_(pattern); - } - - void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) final - { - std::lock_guard<Mutex> lock(mutex_); - set_formatter_(std::move(sink_formatter)); - } - -protected: - virtual void sink_it_(const details::log_msg &msg) = 0; - virtual void flush_() = 0; - - virtual void set_pattern_(const std::string &pattern) - { - set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern)); - } - - virtual void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) - { - formatter_ = std::move(sink_formatter); - } - Mutex mutex_; -}; -} // namespace sinks -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/basic_file_sink.h b/matching/include/spdlog/sinks/basic_file_sink.h deleted file mode 100644 index facc720..0000000 --- a/matching/include/spdlog/sinks/basic_file_sink.h +++ /dev/null @@ -1,75 +0,0 @@ -// -// Copyright(c) 2015-2018 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/file_helper.h" -#include "spdlog/details/null_mutex.h" -#include "spdlog/sinks/base_sink.h" - -#include <mutex> -#include <string> - -namespace spdlog { -namespace sinks { -/* - * Trivial file sink with single file as target - */ -template<typename Mutex> -class basic_file_sink final : public base_sink<Mutex> -{ -public: - explicit basic_file_sink(const filename_t &filename, bool truncate = false) - { - file_helper_.open(filename, truncate); - } - - const filename_t &filename() const - { - return file_helper_.filename(); - } - -protected: - void sink_it_(const details::log_msg &msg) override - { - fmt::memory_buffer formatted; - sink::formatter_->format(msg, formatted); - file_helper_.write(formatted); - } - - void flush_() override - { - file_helper_.flush(); - } - -private: - details::file_helper file_helper_; -}; - -using basic_file_sink_mt = basic_file_sink<std::mutex>; -using basic_file_sink_st = basic_file_sink<details::null_mutex>; - -} // namespace sinks - -// -// factory functions -// -template<typename Factory = default_factory> -inline std::shared_ptr<logger> basic_logger_mt(const std::string &logger_name, const filename_t &filename, bool truncate = false) -{ - return Factory::template create<sinks::basic_file_sink_mt>(logger_name, filename, truncate); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> basic_logger_st(const std::string &logger_name, const filename_t &filename, bool truncate = false) -{ - return Factory::template create<sinks::basic_file_sink_st>(logger_name, filename, truncate); -} - -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/daily_file_sink.h b/matching/include/spdlog/sinks/daily_file_sink.h deleted file mode 100644 index 08392c1..0000000 --- a/matching/include/spdlog/sinks/daily_file_sink.h +++ /dev/null @@ -1,141 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/file_helper.h" -#include "spdlog/details/null_mutex.h" -#include "spdlog/fmt/fmt.h" -#include "spdlog/sinks/base_sink.h" - -#include <chrono> -#include <cstdio> -#include <ctime> -#include <mutex> -#include <string> - -namespace spdlog { -namespace sinks { - -/* - * Generator of daily log file names in format basename.YYYY-MM-DD.ext - */ -struct daily_filename_calculator -{ - // Create filename for the form basename.YYYY-MM-DD - static filename_t calc_filename(const filename_t &filename, const tm &now_tm) - { - filename_t basename, ext; - std::tie(basename, ext) = details::file_helper::split_by_extension(filename); - std::conditional<std::is_same<filename_t::value_type, char>::value, fmt::memory_buffer, fmt::wmemory_buffer>::type w; - fmt::format_to( - w, SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}{}"), basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1, now_tm.tm_mday, ext); - return fmt::to_string(w); - } -}; - -/* - * Rotating file sink based on date. rotates at midnight - */ -template<typename Mutex, typename FileNameCalc = daily_filename_calculator> -class daily_file_sink final : public base_sink<Mutex> -{ -public: - // create daily file sink which rotates on given time - daily_file_sink(filename_t base_filename, int rotation_hour, int rotation_minute, bool truncate = false) - : base_filename_(std::move(base_filename)) - , rotation_h_(rotation_hour) - , rotation_m_(rotation_minute) - , truncate_(truncate) - { - if (rotation_hour < 0 || rotation_hour > 23 || rotation_minute < 0 || rotation_minute > 59) - { - throw spdlog_ex("daily_file_sink: Invalid rotation time in ctor"); - } - auto now = log_clock::now(); - file_helper_.open(FileNameCalc::calc_filename(base_filename_, now_tm(now)), truncate_); - rotation_tp_ = next_rotation_tp_(); - } - - const filename_t &filename() const - { - return file_helper_.filename(); - } - -protected: - void sink_it_(const details::log_msg &msg) override - { - - if (msg.time >= rotation_tp_) - { - file_helper_.open(FileNameCalc::calc_filename(base_filename_, now_tm(msg.time)), truncate_); - rotation_tp_ = next_rotation_tp_(); - } - fmt::memory_buffer formatted; - sink::formatter_->format(msg, formatted); - file_helper_.write(formatted); - } - - void flush_() override - { - file_helper_.flush(); - } - -private: - tm now_tm(log_clock::time_point tp) - { - time_t tnow = log_clock::to_time_t(tp); - return spdlog::details::os::localtime(tnow); - } - - log_clock::time_point next_rotation_tp_() - { - auto now = log_clock::now(); - tm date = now_tm(now); - date.tm_hour = rotation_h_; - date.tm_min = rotation_m_; - date.tm_sec = 0; - auto rotation_time = log_clock::from_time_t(std::mktime(&date)); - if (rotation_time > now) - { - return rotation_time; - } - return {rotation_time + std::chrono::hours(24)}; - } - - filename_t base_filename_; - int rotation_h_; - int rotation_m_; - log_clock::time_point rotation_tp_; - details::file_helper file_helper_; - bool truncate_; -}; - -using daily_file_sink_mt = daily_file_sink<std::mutex>; -using daily_file_sink_st = daily_file_sink<details::null_mutex>; - -} // namespace sinks - -// -// factory functions -// -template<typename Factory = default_factory> -inline std::shared_ptr<logger> daily_logger_mt( - const std::string &logger_name, const filename_t &filename, int hour = 0, int minute = 0, bool truncate = false) -{ - return Factory::template create<sinks::daily_file_sink_mt>(logger_name, filename, hour, minute, truncate); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> daily_logger_st( - const std::string &logger_name, const filename_t &filename, int hour = 0, int minute = 0, bool truncate = false) -{ - return Factory::template create<sinks::daily_file_sink_st>(logger_name, filename, hour, minute, truncate); -} -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/dist_sink.h b/matching/include/spdlog/sinks/dist_sink.h deleted file mode 100644 index 44de391..0000000 --- a/matching/include/spdlog/sinks/dist_sink.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// Copyright (c) 2015 David Schury, Gabi Melman -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "base_sink.h" -#include "spdlog/details/log_msg.h" -#include "spdlog/details/null_mutex.h" - -#include <algorithm> -#include <memory> -#include <mutex> -#include <vector> - -// Distribution sink (mux). Stores a vector of sinks which get called when log -// is called - -namespace spdlog { -namespace sinks { - -template<typename Mutex> -class dist_sink : public base_sink<Mutex> -{ -public: - dist_sink() = default; - dist_sink(const dist_sink &) = delete; - dist_sink &operator=(const dist_sink &) = delete; - - void add_sink(std::shared_ptr<sink> sink) - { - std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_); - sinks_.push_back(sink); - } - - void remove_sink(std::shared_ptr<sink> sink) - { - std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_); - sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sink), sinks_.end()); - } - - void set_sinks(std::vector<std::shared_ptr<sink>> sinks) - { - std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_); - sinks_ = std::move(sinks); - } - -protected: - void sink_it_(const details::log_msg &msg) override - { - - for (auto &sink : sinks_) - { - if (sink->should_log(msg.level)) - { - sink->log(msg); - } - } - } - - void flush_() override - { - for (auto &sink : sinks_) - { - sink->flush(); - } - } - - void set_pattern_(const std::string &pattern) override - { - set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern)); - } - - void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override - { - base_sink<Mutex>::formatter_ = std::move(sink_formatter); - for (auto &sink : sinks_) - { - sink->set_formatter(base_sink<Mutex>::formatter_->clone()); - } - } - std::vector<std::shared_ptr<sink>> sinks_; -}; - -using dist_sink_mt = dist_sink<std::mutex>; -using dist_sink_st = dist_sink<details::null_mutex>; - -} // namespace sinks -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/msvc_sink.h b/matching/include/spdlog/sinks/msvc_sink.h deleted file mode 100644 index f06c16c..0000000 --- a/matching/include/spdlog/sinks/msvc_sink.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright(c) 2016 Alexander Dalshov. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#if defined(_WIN32) - -#include "spdlog/details/null_mutex.h" -#include "spdlog/sinks/base_sink.h" - -#include <winbase.h> - -#include <mutex> -#include <string> - -namespace spdlog { -namespace sinks { -/* - * MSVC sink (logging using OutputDebugStringA) - */ -template<typename Mutex> -class msvc_sink : public base_sink<Mutex> -{ -public: - explicit msvc_sink() {} - -protected: - void sink_it_(const details::log_msg &msg) override - { - - fmt::memory_buffer formatted; - sink::formatter_->format(msg, formatted); - OutputDebugStringA(fmt::to_string(formatted).c_str()); - } - - void flush_() override {} -}; - -using msvc_sink_mt = msvc_sink<std::mutex>; -using msvc_sink_st = msvc_sink<details::null_mutex>; - -using windebug_sink_mt = msvc_sink_mt; -using windebug_sink_st = msvc_sink_st; - -} // namespace sinks -} // namespace spdlog - -#endif diff --git a/matching/include/spdlog/sinks/null_sink.h b/matching/include/spdlog/sinks/null_sink.h deleted file mode 100644 index 54f322c..0000000 --- a/matching/include/spdlog/sinks/null_sink.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/null_mutex.h" -#include "spdlog/sinks/base_sink.h" - -#include <mutex> - -namespace spdlog { -namespace sinks { - -template<typename Mutex> -class null_sink : public base_sink<Mutex> -{ -protected: - void sink_it_(const details::log_msg &) override {} - void flush_() override {} -}; - -using null_sink_mt = null_sink<std::mutex>; -using null_sink_st = null_sink<details::null_mutex>; - -} // namespace sinks - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> null_logger_mt(const std::string &logger_name) -{ - auto null_logger = Factory::template create<sinks::null_sink_mt>(logger_name); - null_logger->set_level(level::off); - return null_logger; -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> null_logger_st(const std::string &logger_name) -{ - auto null_logger = Factory::template create<sinks::null_sink_st>(logger_name); - null_logger->set_level(level::off); - return null_logger; -} - -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/ostream_sink.h b/matching/include/spdlog/sinks/ostream_sink.h deleted file mode 100644 index 22e377b..0000000 --- a/matching/include/spdlog/sinks/ostream_sink.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/null_mutex.h" -#include "spdlog/sinks/base_sink.h" - -#include <mutex> -#include <ostream> - -namespace spdlog { -namespace sinks { -template<typename Mutex> -class ostream_sink final : public base_sink<Mutex> -{ -public: - explicit ostream_sink(std::ostream &os, bool force_flush = false) - : ostream_(os) - , force_flush_(force_flush) - { - } - ostream_sink(const ostream_sink &) = delete; - ostream_sink &operator=(const ostream_sink &) = delete; - -protected: - void sink_it_(const details::log_msg &msg) override - { - fmt::memory_buffer formatted; - sink::formatter_->format(msg, formatted); - ostream_.write(formatted.data(), static_cast<std::streamsize>(formatted.size())); - if (force_flush_) - { - ostream_.flush(); - } - } - - void flush_() override - { - ostream_.flush(); - } - - std::ostream &ostream_; - bool force_flush_; -}; - -using ostream_sink_mt = ostream_sink<std::mutex>; -using ostream_sink_st = ostream_sink<details::null_mutex>; - -} // namespace sinks -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/rotating_file_sink.h b/matching/include/spdlog/sinks/rotating_file_sink.h deleted file mode 100644 index ae0f70f..0000000 --- a/matching/include/spdlog/sinks/rotating_file_sink.h +++ /dev/null @@ -1,164 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/file_helper.h" -#include "spdlog/details/null_mutex.h" -#include "spdlog/fmt/fmt.h" -#include "spdlog/sinks/base_sink.h" - -#include <cerrno> -#include <chrono> -#include <ctime> -#include <mutex> -#include <string> -#include <tuple> - -namespace spdlog { -namespace sinks { - -// -// Rotating file sink based on size -// -template<typename Mutex> -class rotating_file_sink final : public base_sink<Mutex> -{ -public: - rotating_file_sink(filename_t base_filename, std::size_t max_size, std::size_t max_files, bool rotate_on_open=false) - : base_filename_(std::move(base_filename)) - , max_size_(max_size) - , max_files_(max_files) - { - file_helper_.open(calc_filename(base_filename_, 0)); - current_size_ = file_helper_.size(); // expensive. called only once - if (rotate_on_open && current_size_ > 0) - { - rotate_(); - } - } - - // calc filename according to index and file extension if exists. - // e.g. calc_filename("logs/mylog.txt, 3) => "logs/mylog.3.txt". - static filename_t calc_filename(const filename_t &filename, std::size_t index) - { - typename std::conditional<std::is_same<filename_t::value_type, char>::value, fmt::memory_buffer, fmt::wmemory_buffer>::type w; - if (index != 0u) - { - filename_t basename, ext; - std::tie(basename, ext) = details::file_helper::split_by_extension(filename); - fmt::format_to(w, SPDLOG_FILENAME_T("{}.{}{}"), basename, index, ext); - } - else - { - fmt::format_to(w, SPDLOG_FILENAME_T("{}"), filename); - } - return fmt::to_string(w); - } - - const filename_t &filename() const - { - return file_helper_.filename(); - } - -protected: - void sink_it_(const details::log_msg &msg) override - { - fmt::memory_buffer formatted; - sink::formatter_->format(msg, formatted); - current_size_ += formatted.size(); - if (current_size_ > max_size_) - { - rotate_(); - current_size_ = formatted.size(); - } - file_helper_.write(formatted); - } - - void flush_() override - { - file_helper_.flush(); - } - -private: - // Rotate files: - // log.txt -> log.1.txt - // log.1.txt -> log.2.txt - // log.2.txt -> log.3.txt - // log.3.txt -> delete - void rotate_() - { - using details::os::filename_to_str; - file_helper_.close(); - for (auto i = max_files_; i > 0; --i) - { - filename_t src = calc_filename(base_filename_, i - 1); - if (!details::file_helper::file_exists(src)) - { - continue; - } - filename_t target = calc_filename(base_filename_, i); - - if (!rename_file(src, target)) - { - // if failed try again after a small delay. - // this is a workaround to a windows issue, where very high rotation - // rates can cause the rename to fail with permission denied (because of antivirus?). - details::os::sleep_for_millis(100); - if (!rename_file(src, target)) - { - file_helper_.reopen(true); // truncate the log file anyway to prevent it to grow beyond its limit! - current_size_ = 0; - throw spdlog_ex( - "rotating_file_sink: failed renaming " + filename_to_str(src) + " to " + filename_to_str(target), errno); - } - } - } - file_helper_.reopen(true); - } - - // delete the target if exists, and rename the src file to target - // return true on success, false otherwise. - bool rename_file(const filename_t &src_filename, const filename_t &target_filename) - { - // try to delete the target file in case it already exists. - (void)details::os::remove(target_filename); - return details::os::rename(src_filename, target_filename) == 0; - } - - filename_t base_filename_; - std::size_t max_size_; - std::size_t max_files_; - std::size_t current_size_; - details::file_helper file_helper_; -}; - -using rotating_file_sink_mt = rotating_file_sink<std::mutex>; -using rotating_file_sink_st = rotating_file_sink<details::null_mutex>; - -} // namespace sinks - -// -// factory functions -// - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> rotating_logger_mt( - const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files, bool rotate_on_open=false) -{ - return Factory::template create<sinks::rotating_file_sink_mt>(logger_name, filename, max_file_size, max_files, rotate_on_open); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> rotating_logger_st( - const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files, bool rotate_on_open = false) -{ - return Factory::template create<sinks::rotating_file_sink_st>(logger_name, filename, max_file_size, max_files, rotate_on_open); -} -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/sink.h b/matching/include/spdlog/sinks/sink.h deleted file mode 100644 index 2f1adc1..0000000 --- a/matching/include/spdlog/sinks/sink.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#include "spdlog/details/log_msg.h" -#include "spdlog/details/pattern_formatter.h" -#include "spdlog/formatter.h" - -namespace spdlog { -namespace sinks { -class sink -{ -public: - sink() - : level_(level::trace) - , formatter_(new pattern_formatter()) - { - } - - explicit sink(std::unique_ptr<spdlog::pattern_formatter> formatter) - : level_(level::trace) - , formatter_(std::move(formatter)) - { - } - - virtual ~sink() = default; - virtual void log(const details::log_msg &msg) = 0; - virtual void flush() = 0; - virtual void set_pattern(const std::string &pattern) = 0; - virtual void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) = 0; - - bool should_log(level::level_enum msg_level) const - { - return msg_level >= level_.load(std::memory_order_relaxed); - } - - void set_level(level::level_enum log_level) - { - level_.store(log_level); - } - - level::level_enum level() const - { - return static_cast<spdlog::level::level_enum>(level_.load(std::memory_order_relaxed)); - } - -protected: - // sink log level - default is all - level_t level_; - - // sink formatter - default is full format - std::unique_ptr<spdlog::formatter> formatter_; -}; - -} // namespace sinks -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/stdout_color_sinks.h b/matching/include/spdlog/sinks/stdout_color_sinks.h deleted file mode 100644 index 74bfceb..0000000 --- a/matching/include/spdlog/sinks/stdout_color_sinks.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright(c) 2018 spdlog -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#ifdef _WIN32 -#include "spdlog/sinks/wincolor_sink.h" -#else -#include "spdlog/sinks/ansicolor_sink.h" -#endif - -namespace spdlog { -namespace sinks { -#ifdef _WIN32 -using stdout_color_sink_mt = wincolor_stdout_sink_mt; -using stdout_color_sink_st = wincolor_stdout_sink_st; -using stderr_color_sink_mt = wincolor_stderr_sink_mt; -using stderr_color_sink_st = wincolor_stderr_sink_st; -#else -using stdout_color_sink_mt = ansicolor_stdout_sink_mt; -using stdout_color_sink_st = ansicolor_stdout_sink_st; -using stderr_color_sink_mt = ansicolor_stderr_sink_mt; -using stderr_color_sink_st = ansicolor_stderr_sink_st; -#endif -} // namespace sinks - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stdout_color_mt(const std::string &logger_name) -{ - return Factory::template create<sinks::stdout_color_sink_mt>(logger_name); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stdout_color_st(const std::string &logger_name) -{ - return Factory::template create<sinks::stdout_color_sink_st>(logger_name); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stderr_color_mt(const std::string &logger_name) -{ - return Factory::template create<sinks::stderr_color_sink_mt>(logger_name); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stderr_color_st(const std::string &logger_name) -{ - return Factory::template create<sinks::stderr_color_sink_mt>(logger_name); -} -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/stdout_sinks.h b/matching/include/spdlog/sinks/stdout_sinks.h deleted file mode 100644 index bf8e979..0000000 --- a/matching/include/spdlog/sinks/stdout_sinks.h +++ /dev/null @@ -1,102 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/details/console_globals.h" -#include "spdlog/details/null_mutex.h" - -#include <cstdio> -#include <memory> -#include <mutex> - -namespace spdlog { - -namespace sinks { - -template<typename TargetStream, typename ConsoleMutex> -class stdout_sink final : public sink -{ -public: - using mutex_t = typename ConsoleMutex::mutex_t; - stdout_sink() - : mutex_(ConsoleMutex::mutex()) - , file_(TargetStream::stream()) - { - } - ~stdout_sink() override = default; - - stdout_sink(const stdout_sink &other) = delete; - stdout_sink &operator=(const stdout_sink &other) = delete; - - void log(const details::log_msg &msg) override - { - std::lock_guard<mutex_t> lock(mutex_); - fmt::memory_buffer formatted; - formatter_->format(msg, formatted); - fwrite(formatted.data(), sizeof(char), formatted.size(), file_); - fflush(TargetStream::stream()); - } - - void flush() override - { - std::lock_guard<mutex_t> lock(mutex_); - fflush(file_); - } - - void set_pattern(const std::string &pattern) override - { - std::lock_guard<mutex_t> lock(mutex_); - formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern)); - } - - void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override - { - std::lock_guard<mutex_t> lock(mutex_); - formatter_ = std::move(sink_formatter); - } - -private: - mutex_t &mutex_; - FILE *file_; -}; - -using stdout_sink_mt = stdout_sink<details::console_stdout, details::console_mutex>; -using stdout_sink_st = stdout_sink<details::console_stdout, details::console_nullmutex>; - -using stderr_sink_mt = stdout_sink<details::console_stderr, details::console_mutex>; -using stderr_sink_st = stdout_sink<details::console_stderr, details::console_nullmutex>; - -} // namespace sinks - -// factory methods -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stdout_logger_mt(const std::string &logger_name) -{ - return Factory::template create<sinks::stdout_sink_mt>(logger_name); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stdout_logger_st(const std::string &logger_name) -{ - return Factory::template create<sinks::stdout_sink_st>(logger_name); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stderr_logger_mt(const std::string &logger_name) -{ - return Factory::template create<sinks::stderr_sink_mt>(logger_name); -} - -template<typename Factory = default_factory> -inline std::shared_ptr<logger> stderr_logger_st(const std::string &logger_name) -{ - return Factory::template create<sinks::stderr_sink_st>(logger_name); -} -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/syslog_sink.h b/matching/include/spdlog/sinks/syslog_sink.h deleted file mode 100644 index c3bcd84..0000000 --- a/matching/include/spdlog/sinks/syslog_sink.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/sinks/base_sink.h" - -#include <array> -#include <string> -#include <syslog.h> - -namespace spdlog { -namespace sinks { -/** - * Sink that write to syslog using the `syscall()` library call. - * - * Locking is not needed, as `syslog()` itself is thread-safe. - */ -template<typename Mutex> -class syslog_sink : public base_sink<Mutex> -{ -public: - // - explicit syslog_sink(std::string ident = "", int syslog_option = 0, int syslog_facility = LOG_USER) - : ident_(std::move(ident)) - { - priorities_[static_cast<size_t>(level::trace)] = LOG_DEBUG; - priorities_[static_cast<size_t>(level::debug)] = LOG_DEBUG; - priorities_[static_cast<size_t>(level::info)] = LOG_INFO; - priorities_[static_cast<size_t>(level::warn)] = LOG_WARNING; - priorities_[static_cast<size_t>(level::err)] = LOG_ERR; - priorities_[static_cast<size_t>(level::critical)] = LOG_CRIT; - priorities_[static_cast<size_t>(level::off)] = LOG_INFO; - - // set ident to be program name if empty - ::openlog(ident_.empty() ? nullptr : ident_.c_str(), syslog_option, syslog_facility); - } - - ~syslog_sink() override - { - ::closelog(); - } - - syslog_sink(const syslog_sink &) = delete; - syslog_sink &operator=(const syslog_sink &) = delete; - -protected: - void sink_it_(const details::log_msg &msg) override - { - ::syslog(syslog_prio_from_level(msg), "%s", fmt::to_string(msg.payload).c_str()); - } - - void flush_() override {} - -private: - std::array<int, 7> priorities_; - // must store the ident because the man says openlog might use the pointer as - // is and not a string copy - const std::string ident_; - - // - // Simply maps spdlog's log level to syslog priority level. - // - int syslog_prio_from_level(const details::log_msg &msg) const - { - return priorities_[static_cast<size_t>(msg.level)]; - } -}; - -using syslog_sink_mt = syslog_sink<std::mutex>; -using syslog_sink_st = syslog_sink<details::null_mutex>; -} // namespace sinks - -// Create and register a syslog logger -template<typename Factory = default_factory> -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)) -{ - return Factory::template create<sinks::syslog_sink_mt>(logger_name, syslog_ident, syslog_option, syslog_facility); -} - -template<typename Factory = default_factory> -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)) -{ - return Factory::template create<sinks::syslog_sink_st>(logger_name, syslog_ident, syslog_option, syslog_facility); -} -} // namespace spdlog diff --git a/matching/include/spdlog/sinks/wincolor_sink.h b/matching/include/spdlog/sinks/wincolor_sink.h deleted file mode 100644 index 1fdf8c5..0000000 --- a/matching/include/spdlog/sinks/wincolor_sink.h +++ /dev/null @@ -1,143 +0,0 @@ -// -// Copyright(c) 2016 spdlog -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#ifndef SPDLOG_H -#include "spdlog/spdlog.h" -#endif - -#include "spdlog/common.h" -#include "spdlog/details/console_globals.h" -#include "spdlog/details/null_mutex.h" -#include "spdlog/sinks/sink.h" - -#include <memory> -#include <mutex> -#include <string> -#include <unordered_map> -#include <wincon.h> - -namespace spdlog { -namespace sinks { -/* - * Windows color console sink. Uses WriteConsoleA to write to the console with - * colors - */ -template<typename OutHandle, typename ConsoleMutex> -class wincolor_sink : public sink -{ -public: - const WORD BOLD = FOREGROUND_INTENSITY; - const WORD RED = FOREGROUND_RED; - const WORD GREEN = FOREGROUND_GREEN; - const WORD CYAN = FOREGROUND_GREEN | FOREGROUND_BLUE; - const WORD WHITE = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; - const WORD YELLOW = FOREGROUND_RED | FOREGROUND_GREEN; - - wincolor_sink() - : out_handle_(OutHandle::handle()) - , mutex_(ConsoleMutex::mutex()) - { - colors_[level::trace] = WHITE; - colors_[level::debug] = CYAN; - colors_[level::info] = GREEN; - colors_[level::warn] = YELLOW | BOLD; - colors_[level::err] = RED | BOLD; // red bold - colors_[level::critical] = BACKGROUND_RED | WHITE | BOLD; // white bold on red background - colors_[level::off] = 0; - } - - ~wincolor_sink() override - { - this->flush(); - } - - wincolor_sink(const wincolor_sink &other) = delete; - wincolor_sink &operator=(const wincolor_sink &other) = delete; - - // change the color for the given level - void set_color(level::level_enum level, WORD color) - { - std::lock_guard<mutex_t> lock(mutex_); - colors_[level] = color; - } - - void log(const details::log_msg &msg) final override - { - std::lock_guard<mutex_t> lock(mutex_); - fmt::memory_buffer formatted; - formatter_->format(msg, formatted); - if (msg.color_range_end > msg.color_range_start) - { - // before color range - print_range_(formatted, 0, msg.color_range_start); - - // in color range - auto orig_attribs = set_console_attribs(colors_[msg.level]); - print_range_(formatted, msg.color_range_start, msg.color_range_end); - ::SetConsoleTextAttribute(out_handle_, - orig_attribs); // reset to orig colors - // after color range - print_range_(formatted, msg.color_range_end, formatted.size()); - } - else // print without colors if color range is invalid - { - print_range_(formatted, 0, formatted.size()); - } - } - - void flush() final override - { - // windows console always flushed? - } - - void set_pattern(const std::string &pattern) override final - { - std::lock_guard<mutex_t> lock(mutex_); - formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern)); - } - - void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override final - { - std::lock_guard<mutex_t> lock(mutex_); - formatter_ = std::move(sink_formatter); - } - -private: - using mutex_t = typename ConsoleMutex::mutex_t; - // set color and return the orig console attributes (for resetting later) - WORD set_console_attribs(WORD attribs) - { - CONSOLE_SCREEN_BUFFER_INFO orig_buffer_info; - ::GetConsoleScreenBufferInfo(out_handle_, &orig_buffer_info); - WORD back_color = orig_buffer_info.wAttributes; - // retrieve the current background color - back_color &= static_cast<WORD>(~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)); - // keep the background color unchanged - ::SetConsoleTextAttribute(out_handle_, attribs | back_color); - return orig_buffer_info.wAttributes; // return orig attribs - } - - // print a range of formatted message to console - void print_range_(const fmt::memory_buffer &formatted, size_t start, size_t end) - { - auto size = static_cast<DWORD>(end - start); - ::WriteConsoleA(out_handle_, formatted.data() + start, size, nullptr, nullptr); - } - - HANDLE out_handle_; - mutex_t &mutex_; - std::unordered_map<level::level_enum, WORD, level::level_hasher> colors_; -}; - -using wincolor_stdout_sink_mt = wincolor_sink<details::console_stdout, details::console_mutex>; -using wincolor_stdout_sink_st = wincolor_sink<details::console_stdout, details::console_nullmutex>; - -using wincolor_stderr_sink_mt = wincolor_sink<details::console_stderr, details::console_mutex>; -using wincolor_stderr_sink_st = wincolor_sink<details::console_stderr, details::console_nullmutex>; - -} // namespace sinks -} // namespace spdlog |