aboutsummaryrefslogtreecommitdiff
path: root/include/spdlog/sinks/stdout_sinks.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/spdlog/sinks/stdout_sinks.h')
-rw-r--r--include/spdlog/sinks/stdout_sinks.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/include/spdlog/sinks/stdout_sinks.h b/include/spdlog/sinks/stdout_sinks.h
new file mode 100644
index 00000000..40688a46
--- /dev/null
+++ b/include/spdlog/sinks/stdout_sinks.h
@@ -0,0 +1,87 @@
+// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
+// Distributed under the MIT License (http://opensource.org/licenses/MIT)
+
+#pragma once
+
+#include <spdlog/details/console_globals.h>
+#include <spdlog/details/synchronous_factory.h>
+#include <spdlog/sinks/sink.h>
+#include <cstdio>
+
+#ifdef _WIN32
+#include <spdlog/details/windows_include.h>
+#endif
+
+namespace spdlog {
+
+namespace sinks {
+
+template<typename ConsoleMutex>
+class stdout_sink_base : public sink
+{
+public:
+ using mutex_t = typename ConsoleMutex::mutex_t;
+ explicit stdout_sink_base(FILE *file);
+ ~stdout_sink_base() override = default;
+
+ stdout_sink_base(const stdout_sink_base &other) = delete;
+ stdout_sink_base(stdout_sink_base &&other) = delete;
+
+ stdout_sink_base &operator=(const stdout_sink_base &other) = delete;
+ stdout_sink_base &operator=(stdout_sink_base &&other) = delete;
+
+ void log(const details::log_msg &msg) override;
+ void flush() override;
+ void set_pattern(const std::string &pattern) override;
+
+ void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override;
+
+protected:
+ mutex_t &mutex_;
+ FILE *file_;
+ std::unique_ptr<spdlog::formatter> formatter_;
+#ifdef _WIN32
+ HANDLE handle_;
+#endif // WIN32
+};
+
+template<typename ConsoleMutex>
+class stdout_sink : public stdout_sink_base<ConsoleMutex>
+{
+public:
+ stdout_sink();
+};
+
+template<typename ConsoleMutex>
+class stderr_sink : public stdout_sink_base<ConsoleMutex>
+{
+public:
+ stderr_sink();
+};
+
+using stdout_sink_mt = stdout_sink<details::console_mutex>;
+using stdout_sink_st = stdout_sink<details::console_nullmutex>;
+
+using stderr_sink_mt = stderr_sink<details::console_mutex>;
+using stderr_sink_st = stderr_sink<details::console_nullmutex>;
+
+} // namespace sinks
+
+// factory methods
+template<typename Factory = spdlog::synchronous_factory>
+std::shared_ptr<logger> stdout_logger_mt(const std::string &logger_name);
+
+template<typename Factory = spdlog::synchronous_factory>
+std::shared_ptr<logger> stdout_logger_st(const std::string &logger_name);
+
+template<typename Factory = spdlog::synchronous_factory>
+std::shared_ptr<logger> stderr_logger_mt(const std::string &logger_name);
+
+template<typename Factory = spdlog::synchronous_factory>
+std::shared_ptr<logger> stderr_logger_st(const std::string &logger_name);
+
+} // namespace spdlog
+
+#ifdef SPDLOG_HEADER_ONLY
+#include "stdout_sinks-inl.h"
+#endif