12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- from nicegui import ui
- from . import doc
- @doc.demo(ui.log)
- def main_demo() -> None:
- from datetime import datetime
- log = ui.log(max_lines=10).classes('w-full h-20')
- ui.button('Log time', on_click=lambda: log.push(datetime.now().strftime('%X.%f')[:-5]))
- @doc.demo('Attach to a logger', '''
- You can attach a `ui.log` element to a Python logger object so that log messages are pushed to the log element.
- When used inside a page function, it is important to remove the handler when the client disconnects.
- Otherwise, the handler will keep a reference to the log element and the latter will not be garbage collected.
- ''')
- def logger_handler():
- import logging
- from datetime import datetime
- logger = logging.getLogger()
- class LogElementHandler(logging.Handler):
- """A logging handler that emits messages to a log element."""
- def __init__(self, element: ui.log, level: int = logging.NOTSET) -> None:
- self.element = element
- super().__init__(level)
- def emit(self, record: logging.LogRecord) -> None:
- try:
- msg = self.format(record)
- self.element.push(msg)
- except Exception:
- self.handleError(record)
- # @ui.page('/')
- def page():
- log = ui.log(max_lines=10).classes('w-full')
- handler = LogElementHandler(log)
- logger.addHandler(handler)
- ui.context.client.on_disconnect(lambda: logger.removeHandler(handler))
- ui.button('Log time', on_click=lambda: logger.warning(datetime.now().strftime('%X.%f')[:-5]))
- page() # HIDE
- doc.reference(ui.log)
|