Logging API Reference#
Module Overview#
The Minto library’s logging functionality consists of the following modules:
minto.logging_config
: Log configuration and formatting functionalityminto.logger
: Main logging interface
minto.logging_config#
LogLevel#
An enumeration that defines log levels.
class LogLevel(Enum):
DEBUG = "DEBUG"
INFO = "INFO"
WARNING = "WARNING"
ERROR = "ERROR"
CRITICAL = "CRITICAL"
Usage example:
from minto.logging_config import LogLevel
config = LogConfig(level=LogLevel.DEBUG)
LogFormat#
An enumeration that defines log formats.
class LogFormat(Enum):
SIMPLE = "simple"
DETAILED = "detailed"
MINIMAL = "minimal"
COMPACT = "compact"
Usage example:
from minto.logging_config import LogFormat
config = LogConfig(format=LogFormat.DETAILED)
LogConfig#
A dataclass that manages log configuration.
@dataclass
class LogConfig:
enabled: bool = True
level: LogLevel = LogLevel.INFO
format: LogFormat = LogFormat.DETAILED
show_timestamps: bool = True
show_icons: bool = True
show_colors: bool = True
show_details: bool = True
max_value_length: Optional[int] = 200
Parameters:
enabled
: Enable/disable logging functionalitylevel
: Log level to outputformat
: Log display formatshow_timestamps
: Display timestampsshow_icons
: Display iconsshow_colors
: Display colorsshow_details
: Display detailed informationmax_value_length
: Maximum display length for values (None for no limit)
Methods:
should_log(level: LogLevel) -> bool#
Determines whether logs at the specified level should be output.
config = LogConfig(level=LogLevel.WARNING)
print(config.should_log(LogLevel.INFO)) # False
print(config.should_log(LogLevel.ERROR)) # True
LogFormatter#
A class that formats log messages.
class LogFormatter:
def __init__(self, config: LogConfig):
self.config = config
self._indent_level = 0
Methods:
format_message(level: LogLevel, message: str, **kwargs) -> str#
Formats a log message.
Parameters:
level
: Log levelmessage
: Message content**kwargs
: Additional formatting information
set_indent_level(level: int)#
Sets the indent level.
increment_indent()#
Increases the indent level by one.
decrement_indent()#
Decreases the indent level by one.
truncate_value(value: Any, max_length: Optional[int] = None) -> str#
Truncates a value to the specified length.
minto.logger#
MintoLogger#
The main class providing logging functionality.
class MintoLogger:
def __init__(self, config: Optional[LogConfig] = None):
self.config = config or LogConfig()
self.formatter = LogFormatter(self.config)
Experiment Lifecycle Methods:
log_experiment_start(name: str)#
Logs the start of an experiment.
logger.log_experiment_start("my_experiment")
log_experiment_end(name: str, duration: float, num_runs: int)#
Logs the end of an experiment.
Parameters:
name
: Experiment nameduration
: Execution time (seconds)num_runs
: Number of runs executed
log_environment_info(env_info: Dict[str, Any])#
Logs environment information.
Run Lifecycle Methods:
log_run_start(run_id: int)#
Logs the start of a run.
log_run_end(run_id: int, duration: float)#
Logs the end of a run.
Data Logging Methods:
log_parameter(key: str, value: Any)#
Logs a parameter.
logger.log_parameter("temperature", 1.0)
logger.log_parameter("solver_type", "OpenJij")
log_object(key: str, obj: Any, description: Optional[str] = None)#
Logs an object.
logger.log_object("problem_data", data_dict, "QUBO problem instance")
log_solution(key: str, solution: Any)#
Logs a solution.
logger.log_solution("best_solution", [1, 0, 1, 0, 1])
log_sampleset(key: str, num_samples: int, best_energy: Optional[float] = None)#
Logs a sample set.
logger.log_sampleset("results", 1000, -42.5)
log_solver(name: str, execution_time: Optional[float] = None)#
Logs solver execution.
Diagnostic Methods:
log_debug(message: str)#
Logs a DEBUG level message.
log_info(message: str)#
Logs an INFO level message.
log_warning(message: str)#
Logs a WARNING level message.
log_error(message: str)#
Logs an ERROR level message.
log_critical(message: str)#
Logs a CRITICAL level message.
Global Functions#
configure_logging(**kwargs)#
Configures global logging settings.
from minto.logger import configure_logging
from minto.logging_config import LogLevel
configure_logging(
enabled=True,
level=LogLevel.DEBUG,
show_timestamps=True,
show_colors=False
)
Parameters: Accepts the same parameters as the LogConfig
class.
get_logger() -> MintoLogger#
Gets the globally configured logger instance.
from minto.logger import get_logger
logger = get_logger()
logger.log_experiment_start("global_experiment")
Experiment Class Extensions#
New Parameters#
verbose_logging: bool = False#
Controls whether logging functionality is enabled/disabled.
log_config: Optional[LogConfig] = None#
Specifies custom log configuration. Uses global configuration when not specified.
New Methods#
finish_experiment()#
Ends the experiment and logs statistics.
exp = Experiment(name="test", verbose_logging=True)
# ... run experiment ...
exp.finish_experiment()
Run Class Extensions#
New Methods#
log_solver(name: str, solver_func: Callable, exclude_params: Optional[List[str]] = None) -> Callable#
Wraps a solver function to automatically log parameters and execution time.
def my_solver(param1, param2, secret_key):
return {"result": "success"}
with run:
wrapped_solver = run.log_solver(
"my_solver",
my_solver,
exclude_params=["secret_key"]
)
result = wrapped_solver(param1=10, param2="test", secret_key="hidden")
Parameters:
name
: Solver namesolver_func
: Solver function to wrapexclude_params
: List of parameter names to exclude from logging
Return: Wrapped solver function
Usage Examples#
Basic Usage#
from minto import Experiment
exp = Experiment(name="api_example", verbose_logging=True)
run = exp.run()
with run:
run.log_parameter("method", "QAOA")
run.log_parameter("layers", 3)
run.log_solution("result", [1, 0, 1])
exp.finish_experiment()
Custom Configuration#
from minto import Experiment
from minto.logging_config import LogConfig, LogLevel, LogFormat
config = LogConfig(
level=LogLevel.DEBUG,
format=LogFormat.SIMPLE,
show_timestamps=False
)
exp = Experiment(
name="custom_example",
verbose_logging=True,
log_config=config
)
Global Configuration#
from minto.logger import configure_logging, get_logger
from minto.logging_config import LogLevel
configure_logging(level=LogLevel.WARNING, show_colors=False)
logger = get_logger()
logger.log_experiment_start("global_example")
Error Handling#
The logging functionality is designed not to interrupt the main process when errors occur. If an error occurs during log output, it is handled internally and does not affect experiment execution.
Performance#
When
verbose_logging=False
: No overheadWhen
verbose_logging=True
: Less than 1% impact on experiment processing timeMemory usage: Minimal additional memory usage
The logging functionality is designed efficiently and is suitable for use in production environments.