LogIt++
Header-only, macro-first C++ logging library
Loading...
Searching...
No Matches
logit::Logger Class Reference

Singleton class managing multiple loggers and formatters. More...

#include <Logger.hpp>

Classes

struct  LoggerStrategy
 Structure to hold a logger-formatter pair. More...
 

Public Member Functions

void add_logger (std::unique_ptr< ILogger > logger, std::unique_ptr< ILogFormatter > formatter, bool single_mode=false)
 Adds a logger and its corresponding formatter.
 
void set_logger_enabled (int logger_index, bool enabled)
 Enables or disables a logger by index.
 
bool is_logger_enabled (int logger_index) const
 Checks if a logger is enabled.
 
void set_logger_single_mode (int logger_index, bool single_mode)
 Sets single-mode flag for a logger.
 
void set_timestamp_offset (int logger_index, int64_t offset_ms)
 Sets timestamp offset for a specific logger.
 
void set_log_level (LogLevel level)
 Sets minimal log level for all loggers.
 
void set_log_level (int logger_index, LogLevel level)
 Sets minimal log level for a specific logger.
 
bool is_logger_single_mode (int logger_index) const
 Checks whether a logger is in single mode.
 
void log (const LogRecord &record)
 Logs a LogRecord using added loggers and formatters.
 
std::string get_string_param (int logger_index, const LoggerParam &param) const
 Retrieves a string parameter from a logger.
 
int64_t get_int_param (int logger_index, const LoggerParam &param) const
 Retrieves an integer parameter from a logger.
 
double get_float_param (int logger_index, const LoggerParam &param) const
 Retrieves a floating-point parameter from a logger.
 
std::vector< std::string > get_buffered_strings (int logger_index) const
 Retrieves buffered formatted messages from a logger.
 
std::vector< BufferedLogEntry > get_buffered_entries (int logger_index) const
 Retrieves buffered structured entries from a logger.
 
std::vector< LogFileInfo > list_log_files (int logger_index) const
 Lists persisted log files exposed by a logger backend.
 
LogFileReadResult read_log_file (int logger_index, const std::string &path) const
 Reads one persisted log file exposed by a logger backend.
 
std::vector< LogFileReadResult > read_log_files (int logger_index, const std::vector< std::string > &paths) const
 Reads several persisted log files exposed by a logger backend.
 
LogLevel get_log_level (int logger_index) const
 Retrieves the current minimal log level for a logger.
 
template<typename... Ts>
auto log_and_return (const LogRecord &record, Ts &&... args) -> decltype(std::forward_as_tuple(std::forward< Ts >(args)...))
 Logs message and returns tuple of arguments.
 
template<typename T >
auto log_and_return (const LogRecord &record, T &&args) -> decltype(args)
 Logs message and returns argument.
 
auto log_and_return (const LogRecord &record) -> std::tuple<>
 Logs message without arguments and returns empty tuple.
 
void wait ()
 Waits for all asynchronous loggers to finish processing.
 
LogClearResult clear_logger (int logger_index, const LogClearOptions &options=LogClearOptions())
 Clears logger-owned records for a specific logger.
 
LogClearResult clear_all_loggers (const LogClearOptions &options=LogClearOptions())
 Clears logger-owned records for all registered loggers.
 
std::size_t logger_count () const
 Returns the number of registered logger strategies.
 
template<typename LoggerT >
LoggerT * get_logger_as (int logger_index)
 Retrieves a typed backend pointer from a logger by index.
 
template<typename LoggerT >
const LoggerT * get_logger_as (int logger_index) const
 Retrieves a typed backend pointer from a logger by index.
 
void shutdown ()
 Shuts down logger system.
 

Static Public Member Functions

static Logger & get_instance ()
 Retrieves singleton instance of Logger.
 

Private Types

using StrategyList = std::vector<std::shared_ptr<LoggerStrategy>>
 

Private Member Functions

void dispatch_to_strategy (LoggerStrategy &strategy, const LogRecord &record)
 
std::shared_ptr< LoggerStrategy > get_strategy_snapshot (int logger_index) const
 
void publish_strategy_snapshot_locked ()
 
std::vector< std::shared_ptr< LoggerStrategy > > get_all_strategy_snapshots () const
 
void print (const LogRecord &record)
 
template<typename... Ts>
void print (const LogRecord &record, Ts const &... args)
 Logs a record with given arguments.
 
 Logger ()
 
 ~Logger ()
 
 Logger (const Logger &)=delete
 
Logger & operator= (const Logger &)=delete
 
 Logger (Logger &&)=delete
 
Logger & operator= (Logger &&)=delete
 

Static Private Member Functions

static void on_exit_handler ()
 Atexit shutdown handler for Logger and TaskExecutor.
 

Private Attributes

std::vector< std::shared_ptr< LoggerStrategy > > m_loggers
 Container for logger-formatter pairs.
 
std::shared_ptr< const StrategyList > m_loggers_snapshot
 Immutable read-mostly strategy list.
 
LoggerMutex m_loggers_mx
 Protects access to logger strategies.
 
std::atomic< bool > m_shutdown = ATOMIC_VAR_INIT(false)
 Flag indicating if shutdown was requested.
 

Detailed Description

Singleton class managing multiple loggers and formatters.

Allows adding multiple logger and formatter pairs. Provides methods to log messages using these strategies and supports both synchronous and asynchronous logging. Class is thread-safe.

Definition at line 44 of file Logger.hpp.

Member Typedef Documentation

◆ StrategyList

using logit::Logger::StrategyList = std::vector<std::shared_ptr<LoggerStrategy>>
private

Definition at line 47 of file Logger.hpp.

Constructor & Destructor Documentation

◆ Logger() [1/3]

logit::Logger::Logger ( )
inlineprivate

Definition at line 628 of file Logger.hpp.

◆ ~Logger()

logit::Logger::~Logger ( )
inlineprivate

Definition at line 636 of file Logger.hpp.

◆ Logger() [2/3]

logit::Logger::Logger ( const Logger & )
privatedelete

◆ Logger() [3/3]

logit::Logger::Logger ( Logger && )
privatedelete

Member Function Documentation

◆ add_logger()

void logit::Logger::add_logger ( std::unique_ptr< ILogger > logger,
std::unique_ptr< ILogFormatter > formatter,
bool single_mode = false )
inline

Adds a logger and its corresponding formatter.

Parameters
loggerUnique pointer to a logger instance.
formatterUnique pointer to a formatter instance.
single_modeIf true, this logger will only be invoked by specific log macros (e.g., LOGIT_TRACE_TO) that explicitly target it using the logger's index. It will not process logs from general log macros (e.g., LOGIT_TRACE).

Definition at line 64 of file Logger.hpp.

◆ clear_all_loggers()

LogClearResult logit::Logger::clear_all_loggers ( const LogClearOptions & options = LogClearOptions())
inline

Clears logger-owned records for all registered loggers.

Parameters
optionsData categories to clear.
Returns
Aggregated cleanup result. Unsupported loggers are skipped.

Definition at line 457 of file Logger.hpp.

◆ clear_logger()

LogClearResult logit::Logger::clear_logger ( int logger_index,
const LogClearOptions & options = LogClearOptions() )
inline

Clears logger-owned records for a specific logger.

Parameters
logger_indexIndex of logger.
optionsData categories to clear.
Returns
Cleanup result for the selected logger.

Definition at line 427 of file Logger.hpp.

◆ dispatch_to_strategy()

void logit::Logger::dispatch_to_strategy ( LoggerStrategy & strategy,
const LogRecord & record )
inlineprivate

Definition at line 558 of file Logger.hpp.

◆ get_all_strategy_snapshots()

std::vector< std::shared_ptr< LoggerStrategy > > logit::Logger::get_all_strategy_snapshots ( ) const
inlineprivate

Definition at line 589 of file Logger.hpp.

◆ get_buffered_entries()

std::vector< BufferedLogEntry > logit::Logger::get_buffered_entries ( int logger_index) const
inline

Retrieves buffered structured entries from a logger.

Parameters
logger_indexIndex of logger.
Returns
Buffered entries in chronological order, or an empty vector if unsupported.

Definition at line 285 of file Logger.hpp.

◆ get_buffered_strings()

std::vector< std::string > logit::Logger::get_buffered_strings ( int logger_index) const
inline

Retrieves buffered formatted messages from a logger.

Parameters
logger_indexIndex of logger.
Returns
Buffered messages in chronological order, or an empty vector if unsupported.

Definition at line 271 of file Logger.hpp.

◆ get_float_param()

double logit::Logger::get_float_param ( int logger_index,
const LoggerParam & param ) const
inline

Retrieves a floating-point parameter from a logger.

Parameters
logger_indexIndex of logger.
paramLogger parameter to retrieve.
Returns
Requested parameter as a double, or 0.0 if unsupported.

Definition at line 258 of file Logger.hpp.

◆ get_instance()

static Logger & logit::Logger::get_instance ( )
inlinestatic

Retrieves singleton instance of Logger.

Returns
Reference to singleton Logger instance.

Definition at line 53 of file Logger.hpp.

◆ get_int_param()

int64_t logit::Logger::get_int_param ( int logger_index,
const LoggerParam & param ) const
inline

Retrieves an integer parameter from a logger.

Parameters
logger_indexIndex of logger.
paramLogger parameter to retrieve.
Returns
Requested parameter as an integer, or 0 if unsupported.

Definition at line 244 of file Logger.hpp.

◆ get_log_level()

LogLevel logit::Logger::get_log_level ( int logger_index) const
inline

Retrieves the current minimal log level for a logger.

Parameters
logger_indexIndex of logger.
Returns
Current minimal log level, or TRACE when the logger index is invalid.

Definition at line 369 of file Logger.hpp.

◆ get_logger_as() [1/2]

template<typename LoggerT >
LoggerT * logit::Logger::get_logger_as ( int logger_index)
inline

Retrieves a typed backend pointer from a logger by index.

Definition at line 514 of file Logger.hpp.

◆ get_logger_as() [2/2]

template<typename LoggerT >
const LoggerT * logit::Logger::get_logger_as ( int logger_index) const
inline

Retrieves a typed backend pointer from a logger by index.

Definition at line 523 of file Logger.hpp.

◆ get_strategy_snapshot()

std::shared_ptr< LoggerStrategy > logit::Logger::get_strategy_snapshot ( int logger_index) const
inlineprivate

Definition at line 571 of file Logger.hpp.

◆ get_string_param()

std::string logit::Logger::get_string_param ( int logger_index,
const LoggerParam & param ) const
inline

Retrieves a string parameter from a logger.

Parameters
logger_indexIndex of logger.
paramLogger parameter to retrieve.
Returns
Requested parameter as a string, or empty string if unsupported.

Definition at line 230 of file Logger.hpp.

◆ is_logger_enabled()

bool logit::Logger::is_logger_enabled ( int logger_index) const
inline

Checks if a logger is enabled.

Parameters
logger_indexIndex of logger.
Returns
True if logger is enabled, false otherwise.

Definition at line 95 of file Logger.hpp.

◆ is_logger_single_mode()

bool logit::Logger::is_logger_single_mode ( int logger_index) const
inline

Checks whether a logger is in single mode.

Parameters
logger_indexIndex of logger.
Returns
True if logger is in single mode, false otherwise.

Definition at line 153 of file Logger.hpp.

◆ list_log_files()

std::vector< LogFileInfo > logit::Logger::list_log_files ( int logger_index) const
inline

Lists persisted log files exposed by a logger backend.

Parameters
logger_indexIndex of logger.
Returns
Persisted file metadata, or an empty vector if unsupported.

Definition at line 299 of file Logger.hpp.

◆ log()

void logit::Logger::log ( const LogRecord & record)
inline

Logs a LogRecord using added loggers and formatters.

Formats the log message using each logger's corresponding formatter and sends the formatted message to the logger.

Parameters
recordLog record to be logged.

Definition at line 167 of file Logger.hpp.

◆ log_and_return() [1/3]

auto logit::Logger::log_and_return ( const LogRecord & record) -> std::tuple<>
inline

Logs message without arguments and returns empty tuple.

Parameters
recordLog record.
Returns
Empty tuple.

Definition at line 407 of file Logger.hpp.

◆ log_and_return() [2/3]

template<typename T >
auto logit::Logger::log_and_return ( const LogRecord & record,
T && args ) -> decltype(args)
inline

Logs message and returns argument.

Logs provided argument and returns it.

Template Parameters
TType of argument.
Parameters
recordLog record.
argsArgument to be logged.
Returns
Logged argument.

Definition at line 399 of file Logger.hpp.

◆ log_and_return() [3/3]

template<typename... Ts>
auto logit::Logger::log_and_return ( const LogRecord & record,
Ts &&... args ) -> decltype(std::forward_as_tuple(std::forward<Ts>(args)...))
inline

Logs message and returns tuple of arguments.

Template Parameters
TsTypes of arguments.
Parameters
recordLog record.
argsArguments to be logged.
Returns
Tuple containing logged arguments.

Definition at line 386 of file Logger.hpp.

◆ logger_count()

std::size_t logit::Logger::logger_count ( ) const
inline

Returns the number of registered logger strategies.

Definition at line 507 of file Logger.hpp.

◆ on_exit_handler()

static void logit::Logger::on_exit_handler ( )
inlinestaticprivate

Atexit shutdown handler for Logger and TaskExecutor.

Called automatically at program exit.

Definition at line 648 of file Logger.hpp.

◆ operator=() [1/2]

Logger & logit::Logger::operator= ( const Logger & )
privatedelete

◆ operator=() [2/2]

Logger & logit::Logger::operator= ( Logger && )
privatedelete

◆ print() [1/2]

void logit::Logger::print ( const LogRecord & record)
inlineprivate

Definition at line 599 of file Logger.hpp.

◆ print() [2/2]

template<typename... Ts>
void logit::Logger::print ( const LogRecord & record,
Ts const &... args )
inlineprivate

Logs a record with given arguments.

Template Parameters
TsTypes of arguments.
Parameters
recordLog record.
argsArguments to be logged.

Definition at line 613 of file Logger.hpp.

◆ publish_strategy_snapshot_locked()

void logit::Logger::publish_strategy_snapshot_locked ( )
inlineprivate

Definition at line 582 of file Logger.hpp.

◆ read_log_file()

LogFileReadResult logit::Logger::read_log_file ( int logger_index,
const std::string & path ) const
inline

Reads one persisted log file exposed by a logger backend.

Parameters
logger_indexIndex of logger.
pathFull path returned by list_log_files().
Returns
Read result with ok=false when unavailable or unsupported.

Definition at line 314 of file Logger.hpp.

◆ read_log_files()

std::vector< LogFileReadResult > logit::Logger::read_log_files ( int logger_index,
const std::vector< std::string > & paths ) const
inline

Reads several persisted log files exposed by a logger backend.

Parameters
logger_indexIndex of logger.
pathsFull paths returned by list_log_files().
Returns
Per-file read results in request order.

Definition at line 337 of file Logger.hpp.

◆ set_log_level() [1/2]

void logit::Logger::set_log_level ( int logger_index,
LogLevel level )
inline

Sets minimal log level for a specific logger.

Parameters
logger_indexIndex of logger.
levelMinimum log level.

Definition at line 141 of file Logger.hpp.

◆ set_log_level() [2/2]

void logit::Logger::set_log_level ( LogLevel level)
inline

Sets minimal log level for all loggers.

Parameters
levelMinimum log level.

Definition at line 128 of file Logger.hpp.

◆ set_logger_enabled()

void logit::Logger::set_logger_enabled ( int logger_index,
bool enabled )
inline

Enables or disables a logger by index.

Parameters
logger_indexIndex of logger.
enabledTrue to enable, false to disable.

Definition at line 84 of file Logger.hpp.

◆ set_logger_single_mode()

void logit::Logger::set_logger_single_mode ( int logger_index,
bool single_mode )
inline

Sets single-mode flag for a logger.

Parameters
logger_indexIndex of logger to modify.
single_modeTrue to enable single mode, false to disable.

Definition at line 106 of file Logger.hpp.

◆ set_timestamp_offset()

void logit::Logger::set_timestamp_offset ( int logger_index,
int64_t offset_ms )
inline

Sets timestamp offset for a specific logger.

Parameters
logger_indexIndex of logger to modify.
offset_msOffset in milliseconds.

Definition at line 117 of file Logger.hpp.

◆ shutdown()

void logit::Logger::shutdown ( )
inline

Shuts down logger system.

Disables further logging, waits for asynchronous tasks to complete, and shuts down TaskExecutor.

Definition at line 534 of file Logger.hpp.

◆ wait()

void logit::Logger::wait ( )
inline

Waits for all asynchronous loggers to finish processing.

Ensures that all log messages are fully processed before continuing.

Definition at line 415 of file Logger.hpp.

Member Data Documentation

◆ m_loggers

std::vector<std::shared_ptr<LoggerStrategy> > logit::Logger::m_loggers
private

Container for logger-formatter pairs.

Definition at line 594 of file Logger.hpp.

◆ m_loggers_mx

LoggerMutex logit::Logger::m_loggers_mx
mutableprivate

Protects access to logger strategies.

Definition at line 596 of file Logger.hpp.

◆ m_loggers_snapshot

std::shared_ptr<const StrategyList> logit::Logger::m_loggers_snapshot
private

Immutable read-mostly strategy list.

Definition at line 595 of file Logger.hpp.

◆ m_shutdown

std::atomic<bool> logit::Logger::m_shutdown = ATOMIC_VAR_INIT(false)
private

Flag indicating if shutdown was requested.

Definition at line 597 of file Logger.hpp.


The documentation for this class was generated from the following file: