diff --git a/include/spdlog/sinks/stdout_sinks-inl.h b/include/spdlog/sinks/stdout_sinks-inl.h index ab1e7235..230720f4 100644 --- a/include/spdlog/sinks/stdout_sinks-inl.h +++ b/include/spdlog/sinks/stdout_sinks-inl.h @@ -32,8 +32,13 @@ SPDLOG_INLINE stdout_sink_base::stdout_sink_base(FILE *file) { #ifdef _WIN32 // get windows handle from the FILE* object - handle_ = (HANDLE)::_get_osfhandle(::_fileno(file_)); - if (handle_ == INVALID_HANDLE_VALUE) + + handle_ = (HANDLE)::_get_osfhandle(::_fileno(file_)); + + // don't throw to support cases where no console is attached, + // and let the log method to do nothing if (handle_ == INVALID_HANDLE_VALUE). + // throw only if non stdout/stderr target is requested (probably regular file and not console). + if (handle_ == INVALID_HANDLE_VALUE && file != stdout && file != stderr) { throw_spdlog_ex("spdlog::stdout_sink_base: _get_osfhandle() failed", errno); } @@ -43,6 +48,11 @@ SPDLOG_INLINE stdout_sink_base::stdout_sink_base(FILE *file) template SPDLOG_INLINE void stdout_sink_base::log(const details::log_msg &msg) { + if (handle_ == INVALID_HANDLE_VALUE) + { + return; + } + std::lock_guard lock(mutex_); memory_buf_t formatted; formatter_->format(msg, formatted); diff --git a/include/spdlog/sinks/wincolor_sink-inl.h b/include/spdlog/sinks/wincolor_sink-inl.h index 88838f9e..859c4eea 100644 --- a/include/spdlog/sinks/wincolor_sink-inl.h +++ b/include/spdlog/sinks/wincolor_sink-inl.h @@ -59,8 +59,7 @@ template void SPDLOG_INLINE wincolor_sink::log(const details::log_msg &msg) { if (out_handle_ == INVALID_HANDLE_VALUE) - { - // nothing better to do if we don't have valid handle + { return; }