Skip to content

log_config

log_config

Global logging configuration for the OpenJarvis CLI.

Functions

setup_logging

setup_logging(verbose: bool = False, quiet: bool = False, log_file: Optional[Union[str, Path]] = None) -> Logger

Configure the openjarvis logger.

PARAMETER DESCRIPTION
verbose

Set log level to DEBUG.

TYPE: bool DEFAULT: False

quiet

Set log level to ERROR (overrides verbose if both set).

TYPE: bool DEFAULT: False

log_file

Path for a rotating file handler. When verbose is True and no log_file is given, defaults to ~/.openjarvis/cli.log.

TYPE: Optional[Union[str, Path]] DEFAULT: None

RETURNS DESCRIPTION
The configured ``openjarvis`` logger.
Source code in src/openjarvis/cli/log_config.py
def setup_logging(
    verbose: bool = False,
    quiet: bool = False,
    log_file: Optional[Union[str, Path]] = None,
) -> logging.Logger:
    """Configure the ``openjarvis`` logger.

    Parameters
    ----------
    verbose:
        Set log level to DEBUG.
    quiet:
        Set log level to ERROR (overrides verbose if both set).
    log_file:
        Path for a rotating file handler.  When *verbose* is ``True``
        and no *log_file* is given, defaults to
        ``~/.openjarvis/cli.log``.

    Returns
    -------
    The configured ``openjarvis`` logger.
    """
    logger = logging.getLogger("openjarvis")

    # Clear existing handlers to avoid duplication across calls
    logger.handlers.clear()

    if quiet:
        level = logging.ERROR
    elif verbose:
        level = logging.DEBUG
    else:
        level = logging.WARNING

    logger.setLevel(level)

    # Console handler
    console_handler = logging.StreamHandler()
    console_handler.setLevel(level)
    fmt = logging.Formatter("%(levelname)s %(name)s: %(message)s")
    console_handler.setFormatter(fmt)
    logger.addHandler(console_handler)

    # File handler (verbose or explicit path)
    if verbose or log_file is not None:
        if log_file is None:
            log_dir = Path.home() / ".openjarvis"
            log_dir.mkdir(parents=True, exist_ok=True)
            log_file = log_dir / "cli.log"
        file_handler = RotatingFileHandler(
            str(log_file), maxBytes=5 * 1024 * 1024, backupCount=3,
        )
        file_handler.setLevel(logging.DEBUG)
        file_fmt = logging.Formatter(
            "%(asctime)s %(levelname)s %(name)s: %(message)s"
        )
        file_handler.setFormatter(file_fmt)
        logger.addHandler(file_handler)

    return logger