Coverage for faststream / _internal / logger / logger_proxy.py: 85%
20 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-08 01:48 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-08 01:48 +0000
1from abc import abstractmethod
2from collections.abc import Mapping
3from typing import Any, Optional
5from faststream._internal.basic_types import LoggerProto
6from faststream.exceptions import IncorrectState
9class LoggerObject(LoggerProto):
10 logger: Optional["LoggerProto"]
12 @abstractmethod
13 def __bool__(self) -> bool: ...
16class NotSetLoggerObject(LoggerObject):
17 """Default logger proxy for state.
19 Raises an error if user tries to log smth before state setup.
20 """
22 def __init__(self) -> None:
23 self.logger = None
25 def __bool__(self) -> bool:
26 return False
28 def __repr__(self) -> str:
29 return f"{self.__class__.__name__}()"
31 def log(
32 self,
33 level: int,
34 msg: Any,
35 /,
36 *,
37 exc_info: Any = None,
38 extra: Mapping[str, Any] | None = None,
39 ) -> None:
40 err_msg = (
41 "Logger object not set. Please, call `broker.connect()` or "
42 "`_setup_logger_state` of parent broker state."
43 )
44 raise IncorrectState(err_msg)
47class EmptyLoggerObject(LoggerObject):
48 """Empty logger proxy for state.
50 Will be used if user setup `logger=None`.
51 """
53 def __init__(self) -> None:
54 self.logger = None
56 def __bool__(self) -> bool:
57 return True
59 def __repr__(self) -> str:
60 return f"{self.__class__.__name__}()"
62 def log(
63 self,
64 level: int,
65 msg: Any,
66 /,
67 *,
68 exc_info: Any = None,
69 extra: Mapping[str, Any] | None = None,
70 ) -> None:
71 pass
74class RealLoggerObject(LoggerObject):
75 """Empty logger proxy for state.
77 Will be used if user setup custom `logger` (.params_storage.ManualLoggerStorage)
78 or in default logger case (.params_storage.DefaultLoggerStorage).
79 """
81 logger: "LoggerProto"
83 def __init__(self, logger: "LoggerProto") -> None:
84 self.logger = logger
86 def __bool__(self) -> bool:
87 return True
89 def __repr__(self) -> str:
90 return f"{self.__class__.__name__}(logger={self.logger})"
92 def log(
93 self,
94 level: int,
95 msg: Any,
96 /,
97 *,
98 exc_info: Any = None,
99 extra: Mapping[str, Any] | None = None,
100 ) -> None:
101 self.logger.log(
102 level,
103 msg,
104 extra=extra,
105 exc_info=exc_info,
106 )