MCPcopy Index your code
hub / github.com/mongodb/mongo-python-driver / LogMessage

Class LogMessage

pymongo/logger.py:127–189  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

125
126
127class LogMessage:
128 __slots__ = ("_kwargs", "_redacted")
129
130 def __init__(self, **kwargs: Any):
131 self._kwargs = kwargs
132 self._redacted = False
133
134 def __str__(self) -> str:
135 self._redact()
136 return "%s" % (
137 json_util.dumps(
138 self._kwargs, json_options=_JSON_OPTIONS, default=lambda o: o.__repr__()
139 )
140 )
141
142 def _is_sensitive(self, doc_name: str) -> bool:
143 is_speculative_authenticate = (
144 self._kwargs.pop("speculative_authenticate", False)
145 or "speculativeAuthenticate" in self._kwargs[doc_name]
146 )
147 is_sensitive_command = (
148 "commandName" in self._kwargs and self._kwargs["commandName"] in _SENSITIVE_COMMANDS
149 )
150
151 is_sensitive_hello = (
152 self._kwargs.get("commandName", None) in _HELLO_COMMANDS and is_speculative_authenticate
153 )
154
155 return is_sensitive_command or is_sensitive_hello
156
157 def _redact(self) -> None:
158 if self._redacted:
159 return
160 self._kwargs = {k: v for k, v in self._kwargs.items() if v is not None}
161 if "durationMS" in self._kwargs and hasattr(self._kwargs["durationMS"], "total_seconds"):
162 self._kwargs["durationMS"] = self._kwargs["durationMS"].total_seconds() * 1000
163 if "serviceId" in self._kwargs:
164 self._kwargs["serviceId"] = str(self._kwargs["serviceId"])
165 document_length = int(os.getenv("MONGOB_LOG_MAX_DOCUMENT_LENGTH", _DEFAULT_DOCUMENT_LENGTH))
166 if document_length < 0:
167 document_length = _DEFAULT_DOCUMENT_LENGTH
168 is_server_side_error = self._kwargs.pop("isServerSideError", False)
169
170 for doc_name in _DOCUMENT_NAMES:
171 doc = self._kwargs.get(doc_name)
172 if doc:
173 if doc_name == "failure" and is_server_side_error:
174 doc = {k: v for k, v in doc.items() if k in _REDACTED_FAILURE_FIELDS}
175 if doc_name != "failure" and self._is_sensitive(doc_name):
176 doc = json_util.dumps({})
177 else:
178 truncated_doc = _truncate_documents(doc, document_length)[0]
179 doc = json_util.dumps(
180 truncated_doc,
181 json_options=_JSON_OPTIONS,
182 default=lambda o: o.__repr__(),
183 )
184 if len(doc) > document_length:

Callers 2

_debug_logFunction · 0.85
_info_logFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected