Skip to content

capstone.utils.logs

Description: This module provides reusable utilities for logging.

Functions exported by this module: - setup_logging(level: int = DEBUG, log_file: str = "capstone") -> Logger: Configures root logging once for the entire process and returns it.

setup_logging(level=DEBUG, log_file='capstone')

Configure root logging once for the entire process. Returns the package logger for convenience.

Parameters:

Name Type Description Default
level int

The level to set, i.e. INFO, DEBUG, ERROR, etc.

DEBUG

Returns:

Type Description
Logger

The configured root-level logger

Source code in capstone/utils/logs.py
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
def setup_logging(level: int = DEBUG, log_file: str = "capstone") -> Logger:
    """
    Configure root logging once for the entire process.
    Returns the package logger for convenience.

    Args:
        level: The level to set, i.e. INFO, DEBUG, ERROR, etc.

    Returns:
        The configured root-level logger
    """

    global _configured
    if _configured:
        return getLogger(log_file)

    log_path = _project_log_file()
    fmt = Formatter("%(asctime)s - [%(name)s] - %(levelname)s - %(message)s")

    # File handler (append mode, no rotation)
    file_handler = FileHandler(log_path, mode="a" if not IS_TESTING() else "w")
    file_handler.setFormatter(fmt)

    # Console handler
    stream_handler = StreamHandler()
    stream_handler.setFormatter(fmt)

    # config logger
    root = getLogger()
    root.handlers.clear()
    root.name = log_file
    root.setLevel(level)
    root.addHandler(file_handler)
    root.addHandler(stream_handler)

    root.info(
        f" Logging initialized. Log file: ./{Path(log_path).relative_to(Path.cwd())} ".center(
            60, "*"
        )
    )

    _configured = True
    return getLogger(log_file)