|
1 | 1 | import logging
|
2 |
| -from typing import List, Optional, TypeVar |
| 2 | +from typing import Callable, List, Optional, TypeVar |
3 | 3 |
|
4 | 4 | from .logger import Logger
|
5 | 5 |
|
6 | 6 | PowertoolsLogger = TypeVar("PowertoolsLogger", bound=Logger)
|
7 | 7 |
|
8 | 8 |
|
9 | 9 | def copy_config_to_registered_loggers(
|
10 |
| - source_logger: PowertoolsLogger, exclude: Optional[List[str]] = None, include: Optional[List[str]] = None |
| 10 | + source_logger: PowertoolsLogger, |
| 11 | + exclude: Optional[List[str]] = None, |
| 12 | + include: Optional[List[str]] = None, |
11 | 13 | ) -> None:
|
12 | 14 | """Enable powertools logging for imported libraries.
|
13 | 15 |
|
14 | 16 | Attach source logger handlers to external loggers.
|
15 | 17 | Modify logger level based on source logger attribute.
|
| 18 | + Ensure powertools logger itself is excluded from registered list. |
16 | 19 | """
|
17 |
| - registered_loggers = _find_registered_loggers(source_logger, exclude, include) |
| 20 | + |
| 21 | + if include and not exclude: |
| 22 | + loggers = include |
| 23 | + filter_func = _include_registered_loggers_filter |
| 24 | + elif include and exclude: |
| 25 | + exclude = [source_logger.name, *exclude] |
| 26 | + loggers = list(set(include) - set(exclude)) |
| 27 | + filter_func = _include_registered_loggers_filter |
| 28 | + elif not include and exclude: |
| 29 | + loggers = [source_logger.name, *exclude] |
| 30 | + filter_func = _exclude_registered_loggers_filter |
| 31 | + else: |
| 32 | + loggers = [source_logger.name] |
| 33 | + filter_func = _exclude_registered_loggers_filter |
| 34 | + |
| 35 | + registered_loggers = _find_registered_loggers(source_logger, loggers, filter_func) |
18 | 36 | for logger in registered_loggers:
|
19 | 37 | _configure_logger(source_logger, logger)
|
20 | 38 |
|
21 | 39 |
|
22 |
| -def _include_registered_loggers_filter(logger_list: List[str]): |
23 |
| - return [ |
24 |
| - logging.getLogger(name) for name in logging.root.manager.loggerDict if "." not in name and name in logger_list |
25 |
| - ] |
| 40 | +def _include_registered_loggers_filter(loggers: List[str]): |
| 41 | + return [logging.getLogger(name) for name in logging.root.manager.loggerDict if "." not in name and name in loggers] |
26 | 42 |
|
27 | 43 |
|
28 |
| -def _exclude_registered_loggers_filter(logger_list: List[str]) -> List[logging.Logger]: |
| 44 | +def _exclude_registered_loggers_filter(loggers: List[str]) -> List[logging.Logger]: |
29 | 45 | return [
|
30 |
| - logging.getLogger(name) |
31 |
| - for name in logging.root.manager.loggerDict |
32 |
| - if "." not in name and name not in logger_list |
| 46 | + logging.getLogger(name) for name in logging.root.manager.loggerDict if "." not in name and name not in loggers |
33 | 47 | ]
|
34 | 48 |
|
35 | 49 |
|
36 | 50 | def _find_registered_loggers(
|
37 |
| - source_logger: PowertoolsLogger, exclude: Optional[List[str]] = None, include: Optional[List[str]] = None |
| 51 | + source_logger: PowertoolsLogger, loggers: List[str], filter_func: Callable |
38 | 52 | ) -> List[logging.Logger]:
|
39 |
| - """Filter root loggers based on provided parameters. |
40 |
| -
|
41 |
| - Ensure powertools logger itself is excluded from final list. |
42 |
| - """ |
43 |
| - root_loggers = [] |
44 |
| - if include and not exclude: |
45 |
| - root_loggers = _include_registered_loggers_filter(logger_list=include) |
46 |
| - elif include and exclude: |
47 |
| - exclude = [source_logger.name, *exclude] |
48 |
| - root_loggers = _include_registered_loggers_filter(logger_list=list(set(include) - set(exclude))) |
49 |
| - elif not include and exclude: |
50 |
| - exclude = [source_logger.name, *exclude] |
51 |
| - root_loggers = _exclude_registered_loggers_filter(logger_list=exclude) |
52 |
| - else: |
53 |
| - root_loggers = _exclude_registered_loggers_filter(logger_list=[source_logger.name]) |
54 |
| - |
| 53 | + """Filter root loggers based on provided parameters.""" |
| 54 | + root_loggers = filter_func(loggers) |
55 | 55 | source_logger.debug(f"Filtered root loggers: {root_loggers}")
|
56 | 56 | return root_loggers
|
57 | 57 |
|
|
0 commit comments