import logging
from pathlib import Path
LOG_NAME = "firebench"
logger = logging.getLogger(LOG_NAME)
logger.addHandler(logging.NullHandler())
[docs]
def verbosity_to_level(v: int) -> int:
if v <= 0:
return logging.CRITICAL
if v == 1:
return logging.ERROR
if v == 2:
return logging.WARNING
if v == 3:
return logging.INFO
return logging.DEBUG
[docs]
def get_logger(verbose: int, use_console: bool = True, logname: str = LOG_NAME) -> logging.Logger:
return configure_logging(verbose, use_console=use_console, logname=logname)
[docs]
def add_file_handler(
log_path: str | Path,
level: int | None = None,
logname: str = LOG_NAME,
) -> None:
app_logger = logging.getLogger(logname)
log_path = Path(log_path)
log_path.parent.mkdir(parents=True, exist_ok=True)
resolved_log_path = str(log_path.resolve())
for handler in app_logger.handlers[:]:
if isinstance(handler, logging.FileHandler) and handler.baseFilename == resolved_log_path:
app_logger.removeHandler(handler)
handler.close()
file_handler = logging.FileHandler(log_path, mode="w")
file_handler.setLevel(app_logger.level if level is None else level)
file_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
app_logger.addHandler(file_handler)
[docs]
def create_file_handler(log_path: str | Path, level: int = logging.WARNING) -> None:
"""
Compatibility wrapper for older FireBench callers.
"""
app_logger = logging.getLogger(LOG_NAME)
app_logger.setLevel(min(app_logger.level, level) if app_logger.level else level)
app_logger.propagate = True
for handler in app_logger.handlers[:]:
if isinstance(handler, logging.NullHandler):
app_logger.removeHandler(handler)
handler.close()
add_file_handler(log_path, level=level)
[docs]
def set_logging_level(level: int) -> None:
"""
Compatibility wrapper to set the FireBench logger and handler levels.
"""
logger.setLevel(level)
for handler in logger.handlers:
handler.setLevel(level)