Configure logger globally. Args: log_level: The desired verbosity level. log_path: The path to write logs to. prefix: The prefix of the logger.
(log_level: int, log_path: Path | None = None, prefix: str | None = None)
| 12 | |
| 13 | |
| 14 | def configure(log_level: int, log_path: Path | None = None, prefix: str | None = None) -> None: |
| 15 | """Configure logger globally. |
| 16 | |
| 17 | Args: |
| 18 | log_level: The desired verbosity level. |
| 19 | log_path: The path to write logs to. |
| 20 | prefix: The prefix of the logger. |
| 21 | """ |
| 22 | logger = logging.getLogger(prefix) |
| 23 | |
| 24 | # Reset logger to initial state (e.g. to avoid side effects from imports). |
| 25 | for handler in logger.handlers: |
| 26 | logger.removeHandler(handler) |
| 27 | |
| 28 | for filter in logger.filters: |
| 29 | logger.removeFilter(filter) |
| 30 | |
| 31 | # Set level. |
| 32 | logger.setLevel(log_level) |
| 33 | |
| 34 | formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") |
| 35 | |
| 36 | # Set up console handler. |
| 37 | stdout_handler = logging.StreamHandler(sys.stdout) |
| 38 | stdout_handler.setFormatter(formatter) |
| 39 | logger.addHandler(stdout_handler) |
| 40 | |
| 41 | # Set up file handler. |
| 42 | if log_path is not None: |
| 43 | file_handler = logging.FileHandler(log_path, mode="w") |
| 44 | file_handler.setFormatter(formatter) |
| 45 | logger.addHandler(file_handler) |
nothing calls this directly
no outgoing calls
no test coverage detected