This commit is contained in:
2026-07-26 14:46:18 +02:00
parent 810f993830
commit 3bd6cfb81d
8 changed files with 259 additions and 3 deletions

View File

@@ -0,0 +1,51 @@
from __future__ import annotations
import logging
from PySide6.QtCore import QObject, Signal
from bedit_gui.services.application_logging import configure_logging
from bedit_gui.views.main_window import MainWindow
from bedit_gui.views.models import LogListModel
class _LogEmitter(QObject):
message = Signal(str)
class _QtLogHandler(logging.Handler):
def __init__(self, emitter: _LogEmitter) -> None:
super().__init__()
self._emitter = emitter
def emit(self, record: logging.LogRecord) -> None:
try:
self._emitter.message.emit(self.format(record))
except (RuntimeError, TypeError, ValueError):
self.handleError(record)
class LogController(QObject):
"""Routes standard application log records into the log list view."""
def __init__(
self,
window: MainWindow,
level: int | str = logging.INFO,
) -> None:
super().__init__(window)
self.model = LogListModel()
self.emitter = _LogEmitter(self)
self.handler = _QtLogHandler(self.emitter)
self.handler.setFormatter(
logging.Formatter(
"%(asctime)s %(levelname)s %(message)s",
datefmt="%H:%M:%S",
)
)
self.emitter.message.connect(self.model.append)
self.model.rowsInserted.connect(window.ui.listView.scrollToBottom)
window.ui.listView.setModel(self.model)
configure_logging(self.handler, level)