6#ifndef SPDLOG_HEADER_ONLY
19#ifndef _USING_V110_SDK71_
33 template <
typename ConsoleMutex>
40 handle_ =
reinterpret_cast<HANDLE
>(::_get_osfhandle(::_fileno(
file_)));
45 if (handle_ == INVALID_HANDLE_VALUE && file != stdout && file != stderr)
47 throw_spdlog_ex(
"spdlog::stdout_sink_base: _get_osfhandle() failed", errno);
52 template <
typename ConsoleMutex>
56 if (handle_ == INVALID_HANDLE_VALUE)
60 std::lock_guard<mutex_t> lock(mutex_);
62 formatter_->format(msg, formatted);
64 auto size =
static_cast<DWORD
>(formatted.size());
65 DWORD bytes_written = 0;
66 bool ok = ::WriteFile(handle_, formatted.data(), size, &bytes_written,
nullptr) != 0;
69 throw_spdlog_ex(
"stdout_sink_base: WriteFile() failed. GetLastError(): " + std::to_string(::GetLastError()));
72 std::lock_guard<mutex_t> lock(mutex_);
74 formatter_->format(msg, formatted);
75 ::fwrite(formatted.data(),
sizeof(
char), formatted.size(), file_);
80 template <
typename ConsoleMutex>
83 std::lock_guard<mutex_t> lock(mutex_);
87 template <
typename ConsoleMutex>
90 std::lock_guard<mutex_t> lock(mutex_);
94 template <
typename ConsoleMutex>
97 std::lock_guard<mutex_t> lock(mutex_);
98 formatter_ = std::move(sink_formatter);
102 template <
typename ConsoleMutex>
109 template <
typename ConsoleMutex>
118 template <
typename Factory>
121 return Factory::template create<sinks::stdout_sink_mt>(logger_name);
124 template <
typename Factory>
127 return Factory::template create<sinks::stdout_sink_st>(logger_name);
130 template <
typename Factory>
133 return Factory::template create<sinks::stderr_sink_mt>(logger_name);
136 template <
typename Factory>
139 return Factory::template create<sinks::stderr_sink_st>(logger_name);
stderr_sink()
Definition stdout_sinks-inl.h:110
Definition stdout_sinks.h:23
FILE * file_
Definition stdout_sinks.h:43
void flush() override
Definition stdout_sinks-inl.h:81
void log(const details::log_msg &msg) override
Definition stdout_sinks-inl.h:53
void set_pattern(const std::string &pattern) override
Definition stdout_sinks-inl.h:88
stdout_sink_base(FILE *file)
Definition stdout_sinks-inl.h:34
void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) override
Definition stdout_sinks-inl.h:95
stdout_sink()
Definition stdout_sinks-inl.h:103
#define SPDLOG_INLINE
Definition common.h:47
SPDLOG_INLINE std::shared_ptr< logger > stdout_logger_mt(const std::string &logger_name)
Definition stdout_sinks-inl.h:119
SPDLOG_INLINE std::shared_ptr< logger > stderr_logger_st(const std::string &logger_name)
Definition stdout_sinks-inl.h:137
SPDLOG_INLINE std::shared_ptr< logger > stderr_logger_mt(const std::string &logger_name)
Definition stdout_sinks-inl.h:131
SPDLOG_INLINE std::shared_ptr< logger > stdout_logger_st(const std::string &logger_name)
Definition stdout_sinks-inl.h:125
SPDLOG_INLINE void throw_spdlog_ex(const std::string &msg, int last_errno)
Definition common-inl.h:75
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:173
annotation details
Definition tag_strings.h:125