| | """Contains logging related utility functions. |
| | |
| | For licensing see accompanying LICENSE file. |
| | Copyright (C) 2025 Apple Inc. All Rights Reserved. |
| | """ |
| |
|
| | from __future__ import annotations |
| |
|
| | import logging |
| | import sys |
| | from pathlib import Path |
| |
|
| |
|
| | def configure(log_level: int, log_path: Path | None = None, prefix: str | None = None) -> None: |
| | """Configure logger globally. |
| | |
| | Args: |
| | log_level: The desired verbosity level. |
| | log_path: The path to write logs to. |
| | prefix: The prefix of the logger. |
| | """ |
| | logger = logging.getLogger(prefix) |
| |
|
| | |
| | for handler in logger.handlers: |
| | logger.removeHandler(handler) |
| |
|
| | for filter in logger.filters: |
| | logger.removeFilter(filter) |
| |
|
| | |
| | logger.setLevel(log_level) |
| |
|
| | formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") |
| |
|
| | |
| | stdout_handler = logging.StreamHandler(sys.stdout) |
| | stdout_handler.setFormatter(formatter) |
| | logger.addHandler(stdout_handler) |
| |
|
| | |
| | if log_path is not None: |
| | file_handler = logging.FileHandler(log_path, mode="w") |
| | file_handler.setFormatter(formatter) |
| | logger.addHandler(file_handler) |
| |
|