pyTermTk - Logging🌢️

Intro🌢️

The TTkLog class provide a set of api to allow and configure the logging.

Examples🌢️

Example 1 - Log to file🌢️

From example1.logtofile.py (tryItOnline):

import TermTk as ttk

    # session.log is used by default
ttk.TTkLog.use_default_file_logging()

    # Push some Debug messages
ttk.TTkLog.info(    "Test Info Message")
ttk.TTkLog.debug(   "Test Debug Message")
ttk.TTkLog.error(   "Test Error Message")
ttk.TTkLog.warn(    "Test Warning Message")
ttk.TTkLog.critical("Test Critical Message")

Example 2 - Log to stdout🌢️

From example2.logtostdout.py (tryItOnline):

import TermTk as ttk

ttk.TTkLog.use_default_stdout_logging()

    # Push some Debug messages
ttk.TTkLog.info(    "Test Info Message")
ttk.TTkLog.debug(   "Test Debug Message")
ttk.TTkLog.error(   "Test Error Message")
ttk.TTkLog.warn(    "Test Warning Message")
ttk.TTkLog.critical("Test Critical Message")
ttk.TTkLog.fatal(   "Test Fatal Message")

Example 3 - custom logging🌢️

From example3.customlogging.py (tryItOnline):

import TermTk as ttk

    # define the callback used to process the log message
def message_handler(mode, context, message):
    msgType = "NONE"
    if mode == ttk.TTkLog.InfoMsg:       msgType = "[INFO]"
    elif mode == ttk.TTkLog.WarningMsg:  msgType = "[WARNING]"
    elif mode == ttk.TTkLog.CriticalMsg: msgType = "[CRITICAL]"
    elif mode == ttk.TTkLog.FatalMsg:    msgType = "[FATAL]"
    elif mode == ttk.TTkLog.ErrorMsg:    msgType = "[ERROR]"
    print(f"{msgType} {context.file} {message}")

    # Register the callback to the message handler
ttk.TTkLog.installMessageHandler(message_handler)

    # Push some Debug messages
ttk.TTkLog.info(    "Test Info Message")
ttk.TTkLog.debug(   "Test Debug Message")
ttk.TTkLog.error(   "Test Error Message")
ttk.TTkLog.warn(    "Test Warning Message")
ttk.TTkLog.critical("Test Critical Message")
ttk.TTkLog.fatal(   "Test Fatal Message")

Example 4 - Use TTkLogViewer widget🌢️

From example4.ttklogviewer.py (tryItOnline):

import TermTk as ttk

root = ttk.TTk()

    # Create a window and attach it to the root (parent=root)
logWin = ttk.TTkWindow(parent=root,pos = (1,1), size=(80,20), title="LogViewer Window", border=True, layout=ttk.TTkVBoxLayout())

    # Attach the logViewer widget to the window
ttk.TTkLogViewer(parent=logWin)

    # Push some Debug messages
ttk.TTkLog.info(    "Test Info Message")
ttk.TTkLog.debug(   "Test Debug Message")
ttk.TTkLog.error(   "Test Error Message")
ttk.TTkLog.warn(    "Test Warning Message")
ttk.TTkLog.critical("Test Critical Message")
ttk.TTkLog.fatal(   "Test Fatal Message")

    # Start the Main loop
root.mainloop()

The above code produces the following output

╔══════════════════════════════════════════════════════════════════════════════╗
β•‘ LogViewer Window                                                             β•‘
β•Ÿβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•’
β•‘                                                                              β•‘
β•‘INFO : tutorial/logging/example4.ttklogviewer.py:36 Test Info Message         β•‘
β•‘DEBUG: tutorial/logging/example4.ttklogviewer.py:37 Test Debug Message        β•‘
β•‘ERROR: tutorial/logging/example4.ttklogviewer.py:38 Test Error Message        β•‘
β•‘WARNING : tutorial/logging/example4.ttklogviewer.py:39 Test Warning Message   β•‘
β•‘CRITICAL: tutorial/logging/example4.ttklogviewer.py:40 Test Critical Message  β•‘
β•‘FATAL: tutorial/logging/example4.ttklogviewer.py:41 Test Fatal Message        β•‘
β•‘DEBUG: _/.venv/lib/python3.8/site-packages/TermTk/TTkCore/ttk.py:70 Starting Mβ•‘
β•‘DEBUG: _/.venv/lib/python3.8/site-packages/TermTk/TTkCore/ttk.py:80 Signal Eveβ•‘
β•‘DEBUG: _/.venv/lib/python3.8/site-packages/TermTk/TTkCore/ttk.py:65 fps: 33   β•‘
β•‘DEBUG: _/.venv/lib/python3.8/site-packages/TermTk/TTkCore/ttk.py:65 fps: 34   β•‘
β•‘DEBUG: _/.venv/lib/python3.8/site-packages/TermTk/TTkCore/ttk.py:65 fps: 34   β•‘
β•‘                                                                              β•‘
β•‘                                                                              β•‘
β•‘                                                                              β•‘
β•‘β—€β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β”„β”„β”„β”„β”„β”„β”„β”„β”„β”„β”„β–Άβ•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•