log_documentation.py 1.4 KB

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