27 bool auto_detect_color,
28 std::unique_ptr<log_formatter_interface> formatter)
29 : use_stderr_(use_stderr)
31 if (auto_detect_color) {
46 std::lock_guard<std::mutex> lock(
mutex_);
49 auto level =
static_cast<common::interfaces::log_level
>(
static_cast<int>(entry.
level));
54 auto& stream = (
use_stderr_ || level >= common::interfaces::log_level::error)
55 ? std::cerr : std::cout;
60 case common::interfaces::log_level::fatal:
61 case common::interfaces::log_level::error:
64 case common::interfaces::log_level::warning:
67 case common::interfaces::log_level::info:
70 case common::interfaces::log_level::debug:
73 case common::interfaces::log_level::trace:
105 std::lock_guard<std::mutex> lock(
mutex_);
110 if (std::cout.fail() || std::cerr.fail()) {
119 return std::cout.good() && std::cerr.good();
123 std::lock_guard<std::mutex> lock(
mutex_);
141 std::shared_ptr<security::integrity_policy> policy) {
142 std::lock_guard<std::mutex> lock(
mutex_);
157 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
158 if (hOut == INVALID_HANDLE_VALUE) {
163 if (!GetConsoleMode(hOut, &dwMode)) {
168 return (dwMode & 0x0004) != 0;
171 const char* term = std::getenv(
"TERM");
172 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::shared_ptr< security::integrity_policy > integrity_policy_
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.
void set_integrity_policy(std::shared_ptr< security::integrity_policy > policy)
Enable tamper-evident integrity signing for every console record.
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.
Tamper-evident log signing policies for writers.
Data structures for representing log entries and source locations kcenon.
std::string format_signature_suffix(const integrity_policy &policy, const std::string &record)
Format a signature line suitable for appending to a text log record.
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.