Source code for minitrino.core.logging.handler
"""Minitrino logger handler."""
import logging
import sys
from minitrino.core.logging.spinner import Spinner
[docs]
class MinitrinoLoggerHandler(logging.StreamHandler):
"""Primary user-facing log handler for Minitrino.
Clears the spinner line before emitting each log record to ensure clean CLI output
during spinner operations.
"""
def __init__(self, spinner: Spinner):
super().__init__()
self.spinner = spinner
@property
def stream(self):
"""Always return current sys.stderr instead of cached reference.
This ensures the handler writes to whatever stderr currently points to,
including CliRunner's capture buffer during tests.
"""
return sys.stderr
@stream.setter
def stream(self, value):
"""Ignore attempts to set stream - always use current sys.stderr."""
pass
[docs]
def emit(self, record: logging.LogRecord):
"""Emit a log record, always clearing spinner line first."""
if record.levelno < self.level or not self.filter(record):
return
with self.spinner.output_lock:
self.spinner._clear_spinner_line()
super().emit(record)