File indexing completed on 2025-12-17 10:29:02
0001
0002
0003
0004 #pragma once
0005
0006 #include <cstdio>
0007 #include <spdlog/details/console_globals.h>
0008 #include <spdlog/details/synchronous_factory.h>
0009 #include <spdlog/sinks/sink.h>
0010
0011 #ifdef _WIN32
0012 #include <spdlog/details/windows_include.h>
0013 #endif
0014
0015 namespace spdlog {
0016
0017 namespace sinks {
0018
0019 template <typename ConsoleMutex>
0020 class stdout_sink_base : public sink {
0021 public:
0022 using mutex_t = typename ConsoleMutex::mutex_t;
0023 explicit stdout_sink_base(FILE *file);
0024 ~stdout_sink_base() override = default;
0025
0026 stdout_sink_base(const stdout_sink_base &other) = delete;
0027 stdout_sink_base(stdout_sink_base &&other) = delete;
0028
0029 stdout_sink_base &operator=(const stdout_sink_base &other) = delete;
0030 stdout_sink_base &operator=(stdout_sink_base &&other) = delete;
0031
0032 void log(const details::log_msg &msg) override;
0033 void flush() override;
0034 void set_pattern(const std::string &pattern) override;
0035
0036 void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override;
0037
0038 protected:
0039 mutex_t &mutex_;
0040 FILE *file_;
0041 std::unique_ptr<spdlog::formatter> formatter_;
0042 #ifdef _WIN32
0043 HANDLE handle_;
0044 #endif
0045 };
0046
0047 template <typename ConsoleMutex>
0048 class stdout_sink : public stdout_sink_base<ConsoleMutex> {
0049 public:
0050 stdout_sink();
0051 };
0052
0053 template <typename ConsoleMutex>
0054 class stderr_sink : public stdout_sink_base<ConsoleMutex> {
0055 public:
0056 stderr_sink();
0057 };
0058
0059 using stdout_sink_mt = stdout_sink<details::console_mutex>;
0060 using stdout_sink_st = stdout_sink<details::console_nullmutex>;
0061
0062 using stderr_sink_mt = stderr_sink<details::console_mutex>;
0063 using stderr_sink_st = stderr_sink<details::console_nullmutex>;
0064
0065 }
0066
0067
0068 template <typename Factory = spdlog::synchronous_factory>
0069 std::shared_ptr<logger> stdout_logger_mt(const std::string &logger_name);
0070
0071 template <typename Factory = spdlog::synchronous_factory>
0072 std::shared_ptr<logger> stdout_logger_st(const std::string &logger_name);
0073
0074 template <typename Factory = spdlog::synchronous_factory>
0075 std::shared_ptr<logger> stderr_logger_mt(const std::string &logger_name);
0076
0077 template <typename Factory = spdlog::synchronous_factory>
0078 std::shared_ptr<logger> stderr_logger_st(const std::string &logger_name);
0079
0080 }
0081
0082 #ifdef SPDLOG_HEADER_ONLY
0083 #include "stdout_sinks-inl.h"
0084 #endif