Library Reference

Setup functions

log4data.setup_log_args(parser: ArgumentParser | None = None, return_args: bool = False) Namespace | None[source]

Adds logging related arguments to an argparse.ArgumentParser.

This function will add three arguments (log-level, log-file-name, and log-format) to the parser provided. If no parser is given, a new one is created. If return_args is True, parse and return the arguments.

Parameters
parserOptional[argparse.ArgumentParser] default None

The parser to which the arguments are added. If None, a new parser will be created.

return_args(bool) default False

If True, parse the arguments and return the Namespace containing them.

Returns
Optional[argparse.Namespace]

The Namespace containing parsed arguments if return_args is True otherwise, None.

Note

The arguments added are:

  • --log-level (-lglv) [str]: Level at which logs will be shown.

  • --log-file-name (-lgfn) [str]: File where logs will be written.

  • --log-format (-lgfmt) [str]: Logging format. Default is: %(levelname)s - %(asctime)s - %(name)s - %(message)s

log4data.setup_default_logger()[source]

Quick and easy way to setup the logging.basicConfig

  • level: lg.INFO

  • filename: exit_<YYYYMMDD>.log

  • format: %(asctime)s - %(name)s - %(levelname)s - %(message)s

log4data.setup_logger(level: int = 20, log_file_name: str = 'exit.log', log_format: str = '%(asctime)s - %(name)s - %(levelname)s - %(message)s', dynamic_date: bool = True)[source]

Configures the logging.basicConfig() taking into account the log_file_name. Level is set to INFO and format is set to the default: %(asctime)s - %(name)s - %(levelname)s - %(message)s

Parameters
log_file_name(str)

Sets the file where logs will be written to.

dynamic_date(bool)

If True the name will be altered to add the date and result in a name like this: <log_file_name>_<YYYYMMDD>.log

log4data.setup_logger_from_args(args: Namespace)[source]

Configures the logging.basicConfig() taking into account the arguments passed in args.

  • args.log_level sets the level of the logger

  • args.log_file_name sets the file where logs will be written to. This name is taken, and the date is added, resulting in: <args.log_file_name>_<YYYYMMDD>.log

  • args.log_format sets the format string for the handler

  • args.add_dynamic_date

Parameters

args : (argparse.Namespace)

Injectors

log4data.inject_logger(func: Callable[[...], Any]) Callable[[...], Any][source]

A decorator that injects a logger into the decorated function.

This decorator modifies the function by adding a logger parameter automatically before calling the function. It retrieves a logger instance using the function’s module and name, which helps in tracking which function logged the messages.

Note

The decorated function must be designed to accept a logger keyword argument. This implementation does not handle the case where the function already has a logger keyword argument or uses *args and **kwargs in a way that conflicts with the automatic injection of the logger.

Parameters
func(Callable[…, Any])

The function to decorate.

Returns
Callable

A wrapper function that adds the logger to func ‘s arguments.

Example
@inject_logger()
def process_data(data, logger=None):
    logger.info("Processing data")
    pass

# call the function without passing a logger
process_data(data)
log4data.inject_named_logger(logger_name: str | None = None)[source]

A decorator that injects a logger into the decorated function, with a given name.

This decorator modifies the function by adding a logger parameter automatically before calling the function. It retrieves a logger instance using the passed argument logger_name, which helps in tracking.

Note

The decorated function must be designed to accept a logger keyword argument. This implementation does not handle the case where the function already has a logger keyword argument or uses *args and **kwargs in a way that conflicts with the automatic injection of the logger.

Parameters
logger_name(Optional[str])

If logger_name is not None, the logger will have this name. Else the name will be root.

Returns
Callable

A wrapper function that adds the logger to func ‘s arguments.

Example
@inject_named_logger("my_logger")
def process_data(data, logger=None):
    logger.info("Processing data")
    pass

# call the function without passing a logger
process_data(data)

Monitoring

log4data.setup_monitoring_args(parser: ArgumentParser | None = None, return_args: bool = False) Namespace | None[source]

Adds monitor related arguments to an argparse.ArgumentParser.

This function will add two arguments (monitor-name and monitor-file-name) to the parser provided. If no parser is given, a new one is created. If return_args is True, parse and return the arguments.

Parameters
parser(argparse.ArgumentParser, None)

The parser to which the arguments are added. If None, a new parser will be created.

return_args(bool)

If True, parse the arguments and return the Namespace containing them.

Returns
argparse.Namespace or None

The Namespace containing parsed arguments if return_args is True otherwise, None.

Note

The arguments added are:

  • --monitor-name (-mtn) [str]: The name of the monitor.

  • --monitor-file-name (-mtfn) [str]: File where monitor logs will be written.

log4data.setup_default_monitor(return_monitor: bool = False) Logger | None[source]

This function initializes a MonitorLogger with a default configuration.

Optionally, the function returns the monitor object by setting return_monitor to True. You can also get the monitor in other scopes by calling logging.getLogger("monitor") Default configurations are:

  • name: “monitor”

  • file: logs/monitoring_exit_<YYYYMMDD>.log

  • log_level: logging.INFO

log4data.setup_monitor(monitor_name: str = 'monitor', level: int = 20, monitor_file: str = 'logs/monitoring_exit.log', dynamic_date: bool = True, return_monitor: bool = False) Logger | None[source]

This function initializes a monitor logger with the given configuration.

Optionally, the function returns the monitor object by setting return_monitor to True. You can also get the monitor in other scopes by calling logging.getLogger(monitor_name). All parameters have default values

Parameters
logger_name: (str)

The name of the MonitorLogger (subclass of Logger) object

level: (int)

Level at wich monitor logs will be shown

monitor_file: (str)

The file where logs will be stored

dynamic_date: (bool)

Whether to add the date suffix after the monitor_file, obtaining a file like this: <monitor_file>_<YYYYMMDD>.log

log4data.setup_monitor_from_args(args: Namespace, return_monitor: bool = False) Logger | None[source]

Same as setup_monitor but uses an argparse.Namespace to define the configuration.

log4data.inject_default_monitor(func: Callable[[...], Any]) Callable[[...], Any][source]

A decorator that injects a monitor logger into the decorated function.

This decorator modifies the function by adding a monitor parameter automatically before calling the function. It retrieves the default monitor logger (with name “monitor”).

Note

The decorated function must be designed to accept a ‘monitor’ keyword argument. This implementation does not handle the case where the function already has a ‘monitor’ keyword argument or uses *args and **kwargs in a way that conflicts with the automatic injection of the monitor.

Parameters
funcCallable

The function to decorate.

Returns
Callable

A wrapper function that adds the monitor to func’s arguments.

Example
@inject_default_monitor
def process_data(data, monitor=None):
    monitor.info(
        "Processing data",
        key="data_value", value=data
    )
    pass

# call the function without passing a monitor
process_data(data)
log4data.inject_named_monitor(monitor_name: str)[source]

A decorator that injects a monitor logger into the decorated function, with a given name.

This decorator modifies the function by adding a monitor parameter automatically before calling the function. It retrieves a monitor instance using the passed argument monitor_name, which helps in tracking.

Note

  • The decorated function must be designed to accept a ‘monitor’ keyword argument. This implementation does not handle the case where the function already has a ‘monitor’ keyword argument or uses *args and *kwargs in a way that conflicts with the automatic injection of the logger.

  • The monitor must be initialized before injecting it. Else, the logger returned will be a base lg.Logger object with the default configuration.

Parameters
monitor_namestr

The name of the monitor to be used. Cant’t be an empty string.

Returns
Callable

A wrapper function that adds the logger to func’s arguments.

Examples
@inject_named_monitor("my_monitor")
def process_data(data, monitor=None):
    monitor.info(
        "Processing data",
        key="data_value", value=data
    )
    pass

# call the function without passing a monitor logger
process_data(data)

Utils

log4data.delete_old_log_files(log_dir: str = 'logs', older_than: int = 30)[source]

Deletes all log files in the specified directory that are older than the specified number of days.