17 std::unique_ptr<log_formatter_interface> formatter,
20 , append_mode_(append)
21 , binary_mode_(binary)
23 std::lock_guard<std::mutex> lock(
mutex_);
28 std::lock_guard<std::mutex> lock(
mutex_);
33 std::lock_guard<std::mutex> lock(
mutex_);
57 static_cast<std::streamsize
>(formatted.size()));
70 std::lock_guard<std::mutex> lock(
mutex_);
82 std::lock_guard<std::mutex> lock(
mutex_);
92 std::shared_ptr<security::integrity_policy> policy) {
93 std::lock_guard<std::mutex> lock(
mutex_);
110 std::filesystem::path file_path(
filename_);
111 std::filesystem::path dir = file_path.parent_path();
114 if (dir_result.is_err())
return dir_result;
117 auto mode =
append_mode_ ? std::ios::app : std::ios::trunc;
118 auto flags = std::ios::out | mode;
120 flags |= std::ios::binary;
130 if (check.is_err())
return check;
std::shared_ptr< security::integrity_policy > integrity_policy_
Integrity policy shared with derived writers (e.g. rotating_file_writer).
~file_writer() override
Destructor.
common::VoidResult open_internal()
Open the file (internal, caller must hold mutex)
void close_internal()
Close the file (internal, caller must hold mutex)
std::unique_ptr< log_formatter_interface > formatter_
common::VoidResult write(const log_entry &entry) override
Write a log entry to file.
std::atomic< size_t > bytes_written_
std::string format_entry(const log_entry &entry) const
Format a log entry using the current formatter.
std::ofstream file_stream_
std::atomic< bool > is_open_
void set_integrity_policy(std::shared_ptr< security::integrity_policy > policy)
Enable tamper-evident integrity signing for every record.
file_writer(const std::string &filename, bool append=true, std::unique_ptr< log_formatter_interface > formatter=nullptr, bool binary=false)
Constructor.
common::VoidResult close() override
Close the file.
bool is_healthy() const override
Check if writer is healthy.
common::VoidResult flush() override
Flush file stream.
std::string to_string() const
Convert to std::string.
Structured error context for debugging log system failures.
File writer for logging to files with optional buffering.
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_open_operation(F &&operation)
Error handling helper for file open operations.
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 check_condition(bool condition, logger_error_code error_code, const std::string &message)
Condition verification helper.
common::VoidResult ensure_directory_exists(const std::filesystem::path &dir)
Directory creation helper.
common::VoidResult make_logger_void_result(logger_error_code code, const std::string &message="")
Represents a single log entry with all associated metadata.
small_string_256 message
The actual log message.