|
Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
File writer with automatic log rotation support. More...
#include <rotating_file_writer.h>


Public Member Functions | |
| rotating_file_writer (const std::string &filename, size_t max_size, size_t max_files, size_t check_interval=100) | |
| Construct with size-based rotation. | |
| rotating_file_writer (const std::string &filename, rotation_type type, size_t max_files, size_t check_interval=100) | |
| Construct with time-based rotation. | |
| rotating_file_writer (const std::string &filename, rotation_type type, size_t max_size, size_t max_files, size_t check_interval=100) | |
| Construct with combined size and time rotation. | |
| std::string | get_name () const override |
| Get writer name. | |
| void | rotate () |
| Manually trigger log rotation (thread-safe) | |
| common::VoidResult | write (const log_entry &entry) override |
| Write operation with automatic rotation check. | |
Public Member Functions inherited from kcenon::logger::file_writer | |
| file_writer (const std::string &filename, bool append=true, std::unique_ptr< log_formatter_interface > formatter=nullptr) | |
| Constructor. | |
| ~file_writer () override | |
| Destructor. | |
| file_writer (const file_writer &)=delete | |
| file_writer & | operator= (const file_writer &)=delete |
| file_writer (file_writer &&)=delete | |
| file_writer & | operator= (file_writer &&)=delete |
| common::VoidResult | flush () override |
| Flush file stream. | |
| common::VoidResult | close () override |
| Close the file. | |
| bool | is_open () const override |
| Check if file is open. | |
| bool | is_healthy () const override |
| Check if writer is healthy. | |
| size_t | get_file_size () const |
| Get current file size. | |
Public Member Functions inherited from kcenon::logger::log_writer_interface | |
| virtual | ~log_writer_interface ()=default |
Private Member Functions | |
| bool | should_rotate () const |
| Check if rotation should occur. | |
| void | perform_rotation () |
| Perform the actual rotation operation. | |
| std::string | generate_rotated_filename (int index=-1) const |
| Generate filename for rotated log. | |
| void | cleanup_old_files () |
| Remove old backup files beyond max_files limit. | |
| std::vector< std::string > | get_backup_files () const |
| Get list of existing backup files. | |
| bool | should_rotate_by_time () const |
| Check if time-based rotation should occur. | |
| std::size_t | get_file_size () const |
| Get current file size from filesystem. | |
Private Attributes | |
| rotation_type | rotation_type_ |
| size_t | max_size_ |
| size_t | max_files_ |
| size_t | check_interval_ |
| Number of writes between rotation checks. | |
| size_t | writes_since_check_ {0} |
| Counter for writes since last check. | |
| std::string | base_filename_ |
| std::string | file_extension_ |
| std::chrono::system_clock::time_point | last_rotation_time_ |
| std::chrono::system_clock::time_point | current_period_start_ |
Additional Inherited Members | |
Static Public Attributes inherited from kcenon::logger::sync_writer_tag | |
| static constexpr writer_category | category = writer_category::synchronous |
Protected Member Functions inherited from kcenon::logger::file_writer | |
| std::string | format_entry (const log_entry &entry) const |
| Format a log entry using the current formatter. | |
| common::VoidResult | open_internal () |
| Open the file (internal, caller must hold mutex) | |
| void | close_internal () |
| Close the file (internal, caller must hold mutex) | |
| std::mutex & | get_mutex () const |
| Access the writer mutex for extended operations. | |
Protected Attributes inherited from kcenon::logger::file_writer | |
| std::string | filename_ |
| bool | append_mode_ |
| std::ofstream | file_stream_ |
| std::atomic< bool > | is_open_ {false} |
| std::atomic< size_t > | bytes_written_ {0} |
| std::unique_ptr< log_formatter_interface > | formatter_ |
| std::mutex | mutex_ |
File writer with automatic log rotation support.
This writer extends file_writer to add automatic log rotation based on file size, time intervals, or both. When rotation occurs, the current log file is renamed with a timestamp or index, and a new file is created.
Rotation strategies:
Thread Safety:
Category: Synchronous (blocking I/O, inherits from file_writer)
Definition at line 60 of file rotating_file_writer.h.
| kcenon::logger::rotating_file_writer::rotating_file_writer | ( | const std::string & | filename, |
| size_t | max_size, | ||
| size_t | max_files, | ||
| size_t | check_interval = 100 ) |
Construct with size-based rotation.
| filename | Path to the log file |
| max_size | Maximum file size in bytes before rotation |
| max_files | Maximum number of backup files to keep |
| check_interval | Number of writes between rotation checks (default: 100) |
Definition at line 15 of file rotating_file_writer.cpp.
References base_filename_, and file_extension_.
| kcenon::logger::rotating_file_writer::rotating_file_writer | ( | const std::string & | filename, |
| rotation_type | type, | ||
| size_t | max_files, | ||
| size_t | check_interval = 100 ) |
Construct with time-based rotation.
| filename | Path to the log file |
| type | Rotation type (daily or hourly) |
| max_files | Maximum number of backup files to keep |
| check_interval | Number of writes between rotation checks (default: 100) |
Definition at line 36 of file rotating_file_writer.cpp.
References base_filename_, and file_extension_.
| kcenon::logger::rotating_file_writer::rotating_file_writer | ( | const std::string & | filename, |
| rotation_type | type, | ||
| size_t | max_size, | ||
| size_t | max_files, | ||
| size_t | check_interval = 100 ) |
Construct with combined size and time rotation.
| filename | Path to the log file |
| type | Must be rotation_type::size_and_time |
| max_size | Maximum file size in bytes before rotation |
| max_files | Maximum number of backup files to keep |
| check_interval | Number of writes between rotation checks (default: 100) |
| std::invalid_argument | if type is not size_and_time |
Definition at line 57 of file rotating_file_writer.cpp.
References base_filename_, file_extension_, and kcenon::logger::size_and_time.
|
private |
Remove old backup files beyond max_files limit.
Definition at line 250 of file rotating_file_writer.cpp.
References kcenon::logger::file_rotation_failed, get_backup_files(), max_files_, kcenon::common::ok(), and kcenon::logger::utils::try_write_operation().
Referenced by perform_rotation().


|
private |
Generate filename for rotated log.
| index | Optional index for size-based rotation (-1 for auto) |
Definition at line 195 of file rotating_file_writer.cpp.
References base_filename_, kcenon::logger::daily, file_extension_, kcenon::logger::file_writer::filename_, kcenon::logger::hourly, rotation_type_, kcenon::logger::size, and kcenon::logger::size_and_time.
Referenced by perform_rotation().

|
private |
Get list of existing backup files.
Definition at line 276 of file rotating_file_writer.cpp.
References base_filename_, file_extension_, kcenon::logger::file_rotation_failed, kcenon::logger::file_writer::filename_, kcenon::common::ok(), and kcenon::logger::utils::try_write_operation().
Referenced by cleanup_old_files().


|
private |
Get current file size from filesystem.
Definition at line 347 of file rotating_file_writer.cpp.
References kcenon::logger::file_writer::bytes_written_, kcenon::logger::file_writer::file_stream_, and kcenon::logger::file_writer::filename_.
Referenced by should_rotate().

|
inlineoverridevirtual |
Get writer name.
Reimplemented from kcenon::logger::file_writer.
Definition at line 104 of file rotating_file_writer.h.
|
private |
Perform the actual rotation operation.
Definition at line 137 of file rotating_file_writer.cpp.
References kcenon::logger::file_writer::append_mode_, kcenon::logger::file_writer::bytes_written_, cleanup_old_files(), current_period_start_, kcenon::logger::utils::ensure_directory_exists(), kcenon::logger::file_rotation_failed, kcenon::logger::file_writer::file_stream_, kcenon::logger::file_writer::filename_, generate_rotated_filename(), last_rotation_time_, kcenon::common::ok(), kcenon::logger::utils::try_open_operation(), kcenon::logger::utils::try_write_operation(), and writes_since_check_.
Referenced by rotate(), and write().


| void kcenon::logger::rotating_file_writer::rotate | ( | ) |
Manually trigger log rotation (thread-safe)
Definition at line 114 of file rotating_file_writer.cpp.
References kcenon::logger::file_writer::get_mutex(), and perform_rotation().

|
private |
Check if rotation should occur.
Definition at line 120 of file rotating_file_writer.cpp.
References kcenon::logger::daily, get_file_size(), kcenon::logger::hourly, max_size_, rotation_type_, should_rotate_by_time(), kcenon::logger::size, and kcenon::logger::size_and_time.
Referenced by write().


|
private |
Check if time-based rotation should occur.
Definition at line 310 of file rotating_file_writer.cpp.
References current_period_start_, kcenon::logger::daily, kcenon::logger::hourly, rotation_type_, and kcenon::logger::size_and_time.
Referenced by should_rotate().

|
overridevirtual |
Write operation with automatic rotation check.
| entry | The log entry to write (includes structured fields) |
Reimplemented from kcenon::logger::file_writer.
Definition at line 83 of file rotating_file_writer.cpp.
References kcenon::logger::file_writer::bytes_written_, check_interval_, kcenon::logger::file_writer::file_stream_, kcenon::logger::file_write_failed, kcenon::logger::file_writer::format_entry(), kcenon::logger::file_writer::get_mutex(), kcenon::logger::make_logger_void_result(), kcenon::common::ok(), perform_rotation(), should_rotate(), and writes_since_check_.

|
private |
Definition at line 165 of file rotating_file_writer.h.
Referenced by generate_rotated_filename(), get_backup_files(), rotating_file_writer(), rotating_file_writer(), and rotating_file_writer().
|
private |
Number of writes between rotation checks.
Definition at line 163 of file rotating_file_writer.h.
Referenced by write().
|
private |
Definition at line 168 of file rotating_file_writer.h.
Referenced by perform_rotation(), and should_rotate_by_time().
|
private |
Definition at line 166 of file rotating_file_writer.h.
Referenced by generate_rotated_filename(), get_backup_files(), rotating_file_writer(), rotating_file_writer(), and rotating_file_writer().
|
private |
Definition at line 167 of file rotating_file_writer.h.
Referenced by perform_rotation().
|
private |
Definition at line 162 of file rotating_file_writer.h.
Referenced by cleanup_old_files().
|
private |
Definition at line 161 of file rotating_file_writer.h.
Referenced by should_rotate().
|
private |
Definition at line 160 of file rotating_file_writer.h.
Referenced by generate_rotated_filename(), should_rotate(), and should_rotate_by_time().
|
private |
Counter for writes since last check.
Definition at line 164 of file rotating_file_writer.h.
Referenced by perform_rotation(), and write().