"""
Log handler module for capturing and displaying logs in the NiceGUI interface.
"""
from queue import Queue, Empty
from loguru import logger
[docs]
class UILogHandler:
"""Custom log handler to capture logs for UI display."""
FORMAT: str = "{time:YYYY-MM-DD HH:mm:ss} | {level:^8} | {message}"
def __init__(self, level: str = "INFO") -> None:
self.log_queue = Queue()
self.max_logs: int = 100 # Keep only last 100 log entries
self.level: str = level
[docs]
def write(self, message: str) -> None:
"""Write log message to queue."""
if message.strip():
self.log_queue.put(message.strip())
[docs]
def get_logs(self) -> list[str]:
"""Get all available logs from queue."""
logs: list[str] = []
try:
while True:
log = self.log_queue.get_nowait()
logs.append(log)
if len(logs) >= self.max_logs:
break
except Empty:
pass
return logs
[docs]
def clear_logs(self) -> None:
"""Clear all logs from the queue."""
with self.log_queue.mutex:
self.log_queue.queue.clear()
[docs]
def setup_logger(self) -> None:
"""Setup custom log handler for UI display."""
logger.add(
sink=self.write,
format=self.FORMAT,
level=self.level,
)
[docs]
def get_log_settings(self) -> dict:
"""Get log configuration for external loggers."""
return dict(
sink=self.write,
format=self.FORMAT,
level=self.level,
)