MCPcopy Index your code
hub / github.com/DeepLabCut/DeepLabCut / install_debug_recorder

Function install_debug_recorder

deeplabcut/core/debug/debug_logger.py:205–253  ·  view source on GitHub ↗

Attach a single in-memory recorder to the requested logger namespace. Idempotent: repeated calls return the same recorder. Parameters ---------- logger_name: Logger namespace to attach the recorder to. capacity: Maximum number of captured records. By default, us

(
    *,
    logger_name: str = "deeplabcut",
    capacity: int = LOG_QUEUE_MAXLEN,
    handler_level: int = logging.INFO,
    ensure_logger_level: int | None = None,
)

Source from the content-addressed store, hash-verified

203
204
205def install_debug_recorder(
206 *,
207 logger_name: str = "deeplabcut",
208 capacity: int = LOG_QUEUE_MAXLEN,
209 handler_level: int = logging.INFO,
210 ensure_logger_level: int | None = None,
211) -> InMemoryDebugRecorder:
212 """Attach a single in-memory recorder to the requested logger namespace.
213
214 Idempotent: repeated calls return the same recorder.
215
216 Parameters
217 ----------
218 logger_name:
219 Logger namespace to attach the recorder to.
220 capacity:
221 Maximum number of captured records. By default, uses LOG_QUEUE_MAXLEN.
222 handler_level:
223 Minimum level stored by the recorder itself.
224 ensure_logger_level:
225 Controls whether to adjust the target logger level.
226
227 - None: never modify the logger level
228 - int: lower the logger only if its effective level is more restrictive
229 """
230
231 root_logger = logging.getLogger(logger_name)
232
233 existing = getattr(root_logger, _DEBUG_HANDLER_ATTR, None)
234 if isinstance(existing, InMemoryDebugRecorder):
235 return existing
236
237 recorder = InMemoryDebugRecorder(capacity=capacity, level=handler_level)
238 recorder.set_name("deeplabcut-debug-recorder")
239
240 # Important:
241 # - attach only to a DLC-owned logger namespace, not the global root logger
242 # - keep propagation unchanged
243 # - logger level adjustment, if any, is handled below; "auto" initializes
244 # an unset logger to ``handler_level`` rather than forcing DEBUG
245 root_logger.addHandler(recorder)
246
247 if isinstance(ensure_logger_level, int):
248 # Only lower verbosity if explicitly requested.
249 if root_logger.getEffectiveLevel() > ensure_logger_level:
250 root_logger.setLevel(ensure_logger_level)
251
252 setattr(root_logger, _DEBUG_HANDLER_ATTR, recorder)
253 return recorder
254
255
256def get_debug_recorder(*, logger_name: str = "deeplabcut") -> InMemoryDebugRecorder | None:

Calls 1