![]() |
LogIt++
Header-only, macro-first C++ logging library
|
Logs messages to files with date-based rotation and automatic deletion of old logs. More...
#include <FileLogger.hpp>
Classes | |
| struct | Config |
| Configuration for the file logger. More... | |
| struct | FileSortKey |
Public Member Functions | |
| FileLogger () | |
| Default constructor that uses default configuration. | |
| FileLogger (const Config &config) | |
| Constructor with custom configuration. | |
| FileLogger (const std::string &directory, const bool &async=true, const int &auto_delete_days=30) | |
| Constructor with directory and asynchronous flag. | |
| FileLogger (const std::string &directory, const bool &async, const int &auto_delete_days, bool use_dedicated_executor, std::size_t queue_capacity, QueuePolicy queue_policy) | |
| Constructor with directory, async flag, and dedicated executor options. | |
| FileLogger (const std::string &directory, const bool &async, const int &auto_delete_days, uint64_t max_file_size_bytes, uint32_t max_rotated_files) | |
| Constructor with directory, size-based rotation and additional options. | |
| FileLogger (const std::string &directory, const bool &async, const int &auto_delete_days, uint64_t max_file_size_bytes, uint32_t max_rotated_files, bool use_dedicated_executor, std::size_t queue_capacity, QueuePolicy queue_policy) | |
| Constructor with directory, rotation, and dedicated executor options. | |
| virtual | ~FileLogger () |
| Destructor to stop logging and close file. | |
| void | set_config (const Config &config) |
| Updates executor-related configuration at runtime. | |
| bool | set_queue_config (std::size_t queue_capacity, QueuePolicy queue_policy) |
| Updates queue_capacity and queue_policy at runtime without draining tasks. | |
| void | log (const LogRecord &record, const std::string &message) override |
| Logs a message to a file with thread safety. | |
| std::string | get_string_param (const LoggerParam ¶m) const override |
| Retrieves a string parameter from the logger. | |
| int64_t | get_int_param (const LoggerParam ¶m) const override |
| Retrieves an integer parameter from the logger. | |
| double | get_float_param (const LoggerParam ¶m) const override |
| Retrieves a floating-point parameter from the logger. | |
| void | set_log_level (LogLevel level) override |
| Sets the minimal log level for this logger. | |
| LogLevel | get_log_level () const override |
| Gets the minimal log level for this logger. | |
| std::vector< LogFileInfo > | list_log_files () const override |
| Lists persisted log files owned by this backend. | |
| LogFileReadResult | read_log_file (const std::string &path) const override |
| Reads one persisted log file owned by this backend. | |
| std::vector< LogFileReadResult > | read_log_files (const std::vector< std::string > &paths) const override |
| Reads several persisted log files owned by this backend. | |
| LogClearResult | clear_logs (const LogClearOptions &options=LogClearOptions()) override |
| Clears managed log files and reopens the current log file. | |
| void | wait () override |
| Waits for all asynchronous tasks to complete. | |
| void | shutdown () override |
| Stops logger-owned asynchronous resources after draining pending writes. | |
Public Member Functions inherited from logit::ILogger | |
| virtual | ~ILogger ()=default |
| virtual std::vector< std::string > | get_buffered_strings () const |
| Returns buffered formatted messages in chronological order. | |
| virtual std::vector< BufferedLogEntry > | get_buffered_entries () const |
| Returns buffered structured entries in chronological order. | |
Private Member Functions | |
| void | start_logging () |
| Starts the logging process by initializing the file and directory. | |
| void | stop_logging () |
| Stops the logging process by closing the file and waiting for tasks. | |
| void | initialize_directory () |
| Initializes the logging directory. | |
| std::string | get_directory_path () const |
| Gets the full path to the logging directory. | |
| void | open_log_file (const int64_t &date_ts) |
| Opens a new log file based on the provided date timestamp. | |
| std::string | create_file_path (int64_t date_ts) const |
| Creates a file path for the log file based on the date timestamp. | |
| bool | try_make_log_file_info (const std::string &file_path, const std::string ¤t_file_path, LogFileInfo &info) const |
| LogFileReadResult | read_log_file_from_info (const LogFileInfo &info) const |
| bool | read_plain_file (const std::string &file_path, std::string &out) const |
| bool | remove_file_path (const std::string &file_path) const |
| void | sort_log_files_newest_first (std::vector< LogFileInfo > &files) const |
| bool | is_direct_child_path (const std::string &file_path, const std::string &directory_path) const |
| bool | same_path (const std::string &lhs, const std::string &rhs) const |
| std::string | normalize_path_separators (const std::string &path) const |
| bool | is_compressed_log_filename (const std::string &filename) const |
| std::string | strip_compression_suffix (const std::string &filename) const |
| bool | ends_with (const std::string &value, const std::string &suffix) const |
| void | write_log (const std::string &message, const int64_t ×tamp_ms) |
| Writes a log message to the file. | |
| void | rotate_current_file () |
| void | enforce_rotation_retention (const std::string &base, uint32_t max_files, const std::string &dir) |
| std::string | make_rotated_name (const std::string &base, const std::string &dir) const |
| std::string | make_sequence_name (const std::string &base, const std::string &dir) const |
| std::string | make_timestamp_name (const std::string &base, const std::string &dir) const |
| void | remove_old_logs () |
| Removes old log files based on the auto-delete days configuration. | |
| bool | is_valid_log_filename (const std::string &filename) const |
| Checks if the filename matches the log file naming pattern. | |
| int64_t | get_date_ts_from_filename (const std::string &filename) const |
| Extracts the date timestamp from the log filename. | |
| int64_t | get_current_utc_date_ts () const |
| Gets the current UTC date timestamp in seconds. | |
| int64_t | current_timestamp_ms () const |
| Gets the current timestamp in milliseconds. | |
| std::string | get_last_log_file_path () const |
| Retrieves the last log file path. | |
| std::string | get_last_log_file_name () const |
| Retrieves the last log file name. | |
| int64_t | get_last_log_ts () const |
| Retrieves the timestamp of the last log. | |
| int64_t | get_time_since_last_log () const |
| Retrieves the time since the last log. | |
Static Private Member Functions | |
| static Config | make_config (const std::string &directory, bool async, int auto_delete_days, uint64_t max_file_size_bytes, uint32_t max_rotated_files, bool use_dedicated_executor, std::size_t queue_capacity, QueuePolicy queue_policy) |
| static FileSortKey | make_file_sort_key (const LogFileInfo &info) |
| static std::string | strip_compression_suffix_impl (const std::string &filename) |
| static bool | ends_with_impl (const std::string &value, const std::string &suffix) |
Private Attributes | |
| std::mutex | m_mutex |
| Mutex to protect file operations. | |
| std::mutex | m_lifecycle_mutex |
| Serializes direct log() calls with shutdown(). | |
| Config | m_config |
| Configuration for the file logger. | |
| std::ofstream | m_file |
| Output file stream for logging. | |
| std::mutex | m_file_path_mutex |
| Mutex to protect file path operations. | |
| std::string | m_file_path |
| Path of the currently open log file. | |
| std::string | m_file_name |
| Name of the currently open log file. | |
| int64_t | m_current_date_ts = 0 |
| Timestamp of the current log file's date. | |
| uint64_t | m_current_file_size = 0 |
| Current size of the log file. | |
| std::unique_ptr< detail::CompressionWorker > | m_compressor |
| Background compressor. | |
| std::unique_ptr< detail::SingleThreadExecutor > | m_executor |
| Dedicated executor (null = use global). | |
| std::atomic< int64_t > | m_last_log_ts = ATOMIC_VAR_INIT(0) |
| Timestamp of the last log. | |
| std::atomic< int64_t > | m_last_log_mono_ts = ATOMIC_VAR_INIT(0) |
| Timestamp of the last log. | |
| std::atomic< int > | m_log_level = ATOMIC_VAR_INIT(static_cast<int>(LogLevel::LOG_LVL_TRACE)) |
| std::atomic< bool > | m_shutdown = ATOMIC_VAR_INIT(false) |
Logs messages to files with date-based rotation and automatic deletion of old logs.
This logger writes logs to files organized by date. It supports asynchronous logging and manages old files based on a configurable retention period.
Key Features:
Definition at line 90 of file FileLogger.hpp.
|
inline |
Default constructor that uses default configuration.
Definition at line 113 of file FileLogger.hpp.
|
inline |
Constructor with custom configuration.
| config | The configuration for the logger. |
Definition at line 119 of file FileLogger.hpp.
|
inline |
Constructor with directory and asynchronous flag.
| directory | The directory where log files will be stored. |
| async | Boolean flag for asynchronous logging. |
| auto_delete_days | Number of days after which old log files are deleted. |
Definition at line 132 of file FileLogger.hpp.
|
inline |
Constructor with directory, async flag, and dedicated executor options.
Definition at line 143 of file FileLogger.hpp.
|
inline |
Constructor with directory, size-based rotation and additional options.
Definition at line 161 of file FileLogger.hpp.
|
inline |
Constructor with directory, rotation, and dedicated executor options.
Definition at line 176 of file FileLogger.hpp.
|
inlinevirtual |
Destructor to stop logging and close file.
Definition at line 196 of file FileLogger.hpp.
|
inlineoverridevirtual |
Clears managed log files and reopens the current log file.
Implements logit::ILogger.
Definition at line 469 of file FileLogger.hpp.
|
inlineprivate |
Creates a file path for the log file based on the date timestamp.
| date_ts | The timestamp representing the date for the log file. |
Definition at line 645 of file FileLogger.hpp.
|
inlineprivate |
Gets the current timestamp in milliseconds.
Definition at line 1166 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 835 of file FileLogger.hpp.
|
inlinestaticprivate |
Definition at line 839 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 925 of file FileLogger.hpp.
|
inlineprivate |
Gets the current UTC date timestamp in seconds.
Definition at line 1160 of file FileLogger.hpp.
|
inlineprivate |
Extracts the date timestamp from the log filename.
| filename | The filename to extract the date from. |
Definition at line 1154 of file FileLogger.hpp.
|
inlineprivate |
Gets the full path to the logging directory.
Definition at line 611 of file FileLogger.hpp.
|
inlineoverridevirtual |
Retrieves a floating-point parameter from the logger.
| param | The parameter type to retrieve. |
Implements logit::ILogger.
Definition at line 353 of file FileLogger.hpp.
|
inlineoverridevirtual |
Retrieves an integer parameter from the logger.
| param | The parameter type to retrieve. |
Implements logit::ILogger.
Definition at line 340 of file FileLogger.hpp.
|
inlineprivate |
Retrieves the last log file name.
Definition at line 1179 of file FileLogger.hpp.
|
inlineprivate |
Retrieves the last log file path.
Definition at line 1172 of file FileLogger.hpp.
|
inlineprivate |
Retrieves the timestamp of the last log.
Definition at line 1186 of file FileLogger.hpp.
|
inlineoverridevirtual |
Gets the minimal log level for this logger.
Implements logit::ILogger.
Definition at line 371 of file FileLogger.hpp.
|
inlineoverridevirtual |
Retrieves a string parameter from the logger.
| param | The parameter type to retrieve. |
Implements logit::ILogger.
Definition at line 325 of file FileLogger.hpp.
|
inlineprivate |
Retrieves the time since the last log.
Definition at line 1192 of file FileLogger.hpp.
|
inlineprivate |
Initializes the logging directory.
Definition at line 605 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 817 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 780 of file FileLogger.hpp.
|
inlineprivate |
Checks if the filename matches the log file naming pattern.
| filename | The filename to check. |
Definition at line 1141 of file FileLogger.hpp.
|
inlineoverridevirtual |
Lists persisted log files owned by this backend.
Implements logit::ILogger.
Definition at line 377 of file FileLogger.hpp.
|
inlineoverridevirtual |
Logs a message to a file with thread safety.
If asynchronous logging is enabled, the message is added to the task queue; otherwise, it is logged directly.
| record | The log record containing log information. |
| message | The formatted log message. |
Implements logit::ILogger.
Definition at line 286 of file FileLogger.hpp.
|
inlinestaticprivate |
Definition at line 558 of file FileLogger.hpp.
|
inlinestaticprivate |
Definition at line 753 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 1007 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 1018 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 1049 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 809 of file FileLogger.hpp.
|
inlineprivate |
Opens a new log file based on the provided date timestamp.
| date_ts | The timestamp representing the date for the log file. |
Definition at line 621 of file FileLogger.hpp.
|
inlineoverridevirtual |
Reads one persisted log file owned by this backend.
This API reads only the already persisted file contents and does not wait for pending async writes.
| path | Full path returned by list_log_files(). |
Implements logit::ILogger.
Definition at line 423 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 671 of file FileLogger.hpp.
|
inlineoverridevirtual |
Reads several persisted log files owned by this backend.
| paths | Full paths returned by list_log_files(). |
Implements logit::ILogger.
Definition at line 441 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 691 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 708 of file FileLogger.hpp.
|
inlineprivate |
Removes old log files based on the auto-delete days configuration.
Definition at line 1095 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 865 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 797 of file FileLogger.hpp.
|
inline |
Updates executor-related configuration at runtime.
This call is blocking. If asynchronous logging is currently enabled, it waits until already accepted tasks are drained before changing async mode or executor ownership. Only async, use_dedicated_executor, queue_capacity, and queue_policy are applied. File/rotation/compression fields are ignored. For hot queue tuning without switching executor mode, use set_queue_config().
Definition at line 208 of file FileLogger.hpp.
|
inlineoverridevirtual |
Sets the minimal log level for this logger.
Implements logit::ILogger.
Definition at line 366 of file FileLogger.hpp.
|
inline |
Updates queue_capacity and queue_policy at runtime without draining tasks.
| queue_capacity | New maximum queue size (0 = unlimited). |
| queue_policy | Overflow policy for the executor queue. |
Unlike set_config(), this method never blocks on task drain and never changes async mode or executor ownership. If no dedicated executor exists, only the stored config fields are updated for future reference.
Definition at line 257 of file FileLogger.hpp.
|
inlineoverridevirtual |
Stops logger-owned asynchronous resources after draining pending writes.
Implements logit::ILogger.
Definition at line 527 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 716 of file FileLogger.hpp.
|
inlineprivate |
Starts the logging process by initializing the file and directory.
Definition at line 580 of file FileLogger.hpp.
|
inlineprivate |
Stops the logging process by closing the file and waiting for tasks.
Definition at line 596 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 821 of file FileLogger.hpp.
|
inlinestaticprivate |
Definition at line 825 of file FileLogger.hpp.
|
inlineprivate |
Definition at line 650 of file FileLogger.hpp.
|
inlineoverridevirtual |
Waits for all asynchronous tasks to complete.
Implements logit::ILogger.
Definition at line 514 of file FileLogger.hpp.
|
inlineprivate |
Writes a log message to the file.
| message | The log message to write. |
| timestamp_ms | The timestamp of the log message in milliseconds. |
Definition at line 847 of file FileLogger.hpp.
|
private |
Background compressor.
Definition at line 551 of file FileLogger.hpp.
|
private |
Configuration for the file logger.
Definition at line 544 of file FileLogger.hpp.
|
private |
Timestamp of the current log file's date.
Definition at line 549 of file FileLogger.hpp.
|
private |
Current size of the log file.
Definition at line 550 of file FileLogger.hpp.
|
private |
Dedicated executor (null = use global).
Definition at line 552 of file FileLogger.hpp.
|
mutableprivate |
Output file stream for logging.
Definition at line 545 of file FileLogger.hpp.
|
private |
Name of the currently open log file.
Definition at line 548 of file FileLogger.hpp.
|
private |
Path of the currently open log file.
Definition at line 547 of file FileLogger.hpp.
|
mutableprivate |
Mutex to protect file path operations.
Definition at line 546 of file FileLogger.hpp.
|
private |
Timestamp of the last log.
Definition at line 554 of file FileLogger.hpp.
|
private |
Timestamp of the last log.
Definition at line 553 of file FileLogger.hpp.
|
private |
Serializes direct log() calls with shutdown().
Definition at line 543 of file FileLogger.hpp.
|
private |
Definition at line 555 of file FileLogger.hpp.
|
mutableprivate |
Mutex to protect file operations.
Definition at line 542 of file FileLogger.hpp.
|
private |
Definition at line 556 of file FileLogger.hpp.