log_documentation.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from nicegui import ui
  2. from ...model import UiElementDocumentation
  3. class LogDocumentation(UiElementDocumentation, element=ui.log):
  4. def main_demo(self) -> None:
  5. from datetime import datetime
  6. log = ui.log(max_lines=10).classes('w-full h-20')
  7. ui.button('Log time', on_click=lambda: log.push(datetime.now().strftime('%X.%f')[:-5]))
  8. def more(self) -> None:
  9. @self.demo('Attach to a logger', '''
  10. You can attach a `ui.log` element to a Python logger object so that log messages are pushed to the log element.
  11. ''')
  12. def logger_handler():
  13. import logging
  14. from datetime import datetime
  15. logger = logging.getLogger()
  16. class LogElementHandler(logging.Handler):
  17. """A logging handler that emits messages to a log element."""
  18. def __init__(self, element: ui.log, level: int = logging.NOTSET) -> None:
  19. self.element = element
  20. super().__init__(level)
  21. def emit(self, record: logging.LogRecord) -> None:
  22. try:
  23. msg = self.format(record)
  24. self.element.push(msg)
  25. except Exception:
  26. self.handleError(record)
  27. log = ui.log(max_lines=10).classes('w-full')
  28. logger.addHandler(LogElementHandler(log))
  29. ui.button('Log time', on_click=lambda: logger.warning(datetime.now().strftime('%X.%f')[:-5]))