Logging
This commit is contained in:
51
src/bedit_gui/controllers/log_controller.py
Normal file
51
src/bedit_gui/controllers/log_controller.py
Normal 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)
|
||||
Reference in New Issue
Block a user