| """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) |
|
|