This is a custom logging.Handler class that lets you use standard logging calls to output messages to SysInternals' DebugView utility.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # DbgViewHandler for Python's standard logging module
# For information on DebugView see http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
import logging
from win32api import OutputDebugString
class DbgViewHandler(logging.Handler):
def __init__(self):
logging.Handler.__init__(self)
def emit(self, record):
OutputDebugString(self.format(record))
if __name__ == '__main__':
# example
log = logging.getLogger()
log.addHandler(DbgViewHandler())
log.warn('test a warning message')
|
DebugView is a windows utility from the SysInternals suite that provides a console to capture debug output form application and kernel components running in windows. It has a number of features including filtering, pattern-matched highlighting and the ability to capture log messages from remote machines on network. Full information is available here: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
Writing to DebugView from Python is easy with the Pywin32 extensions (via the win32api.OutputDebugString function), and here is a Handler class that integrates it with the standard logging module.
Very useful!
I'd just remove the __init__ method, as it adds nothing (and actually has a wrong signature: the Handler class takes an optional argument).
One may avoid the dependency with pywin32 by using ctypes; just replace the import line with: