26 bool auto_detect_color,
27 std::unique_ptr<log_formatter_interface> formatter)
28 : use_stderr_(use_stderr)
30 if (auto_detect_color) {
45 std::lock_guard<std::mutex> lock(
mutex_);
48 auto level =
static_cast<common::interfaces::log_level
>(
static_cast<int>(entry.
level));
50 auto& stream = (
use_stderr_ || level <= common::interfaces::log_level::error)
51 ? std::cerr : std::cout;
56 case common::interfaces::log_level::fatal:
57 case common::interfaces::log_level::error:
60 case common::interfaces::log_level::warning:
63 case common::interfaces::log_level::info:
66 case common::interfaces::log_level::debug:
69 case common::interfaces::log_level::trace:
91 std::lock_guard<std::mutex> lock(
mutex_);
96 if (std::cout.fail() || std::cerr.fail()) {
105 return std::cout.good() && std::cerr.good();
109 std::lock_guard<std::mutex> lock(
mutex_);
137 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
138 if (hOut == INVALID_HANDLE_VALUE) {
143 if (!GetConsoleMode(hOut, &dwMode)) {
148 return (dwMode & 0x0004) != 0;
151 const char* term = std::getenv(
"TERM");
152 return isatty(STDOUT_FILENO) && term && std::string(term) !=
"dumb";
console_writer(bool use_stderr=false, bool auto_detect_color=true, std::unique_ptr< log_formatter_interface > formatter=nullptr)
Constructor.
bool is_healthy() const override
Check if writer is healthy.
bool use_color() const
Get current color output setting.
bool is_color_supported() const
Check if terminal supports color.
std::unique_ptr< log_formatter_interface > formatter_
void set_use_stderr(bool use_stderr)
Set whether to use stderr for all output.
~console_writer() override
Destructor.
void set_use_color(bool use_color)
Set whether to use color output (if supported)
common::VoidResult write(const log_entry &entry) override
Write a log entry to console.
std::string format_entry(const log_entry &entry) const
Format a log entry using the current formatter.
common::VoidResult flush() override
Flush console streams.
std::string to_string() const
Convert to std::string.
Console writer for logging to stdout/stderr.
Structured error context for debugging log system failures.
Data structures for representing log entries and source locations kcenon.
common::VoidResult check_stream_state(const Stream &stream, const std::string &operation_name="operation")
Stream state verification helper.
common::VoidResult try_write_operation(F &&operation, logger_error_code default_error_code=logger_error_code::file_write_failed)
Error handling helper for write operations.
common::VoidResult make_logger_void_result(logger_error_code code, const std::string &message="")
Small String Optimization (SSO) for short log messages.
Represents a single log entry with all associated metadata.
log_level level
Severity level of the log message.
small_string_256 message
The actual log message.