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   ║
║                                                                              ║
║                                                                              ║
║                                                                              ║
║◀▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┄┄┄┄┄┄┄┄┄┄┄▶║
╚══════════════════════════════════════════════════════════════════════════════╝