diff options
Diffstat (limited to 'pyasn1/debug.py')
-rw-r--r-- | pyasn1/debug.py | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/pyasn1/debug.py b/pyasn1/debug.py index 21d9e3c..e9ff719 100644 --- a/pyasn1/debug.py +++ b/pyasn1/debug.py @@ -1,4 +1,5 @@ -import sys +import time +import logging from pyasn1.compat.octets import octs2ints from pyasn1 import error from pyasn1 import __version__ @@ -14,13 +15,33 @@ flagMap = { 'all': flagAll } +class Printer: + def __init__(self, logger=None, handler=None, formatter=None): + if logger is None: + logger = logging.getLogger('pyasn1') + logger.setLevel(logging.DEBUG) + if handler is None: + handler = logging.StreamHandler() + if formatter is None: + formatter = logging.Formatter('%(name)s: %(message)s') + handler.setFormatter(formatter) + handler.setLevel(logging.DEBUG) + logger.addHandler(handler) + self.__logger = logger + + def __call__(self, msg): self.__logger.debug(msg) + def __str__(self): return '<python built-in logging>' + class Debug: - defaultPrinter = sys.stderr and sys.stderr.write or None - def __init__(self, *flags): + defaultPrinter = None + def __init__(self, *flags, **options): self._flags = flagNone - if not self.defaultPrinter: - raise error.PyAsn1Error('Null debug writer specified') - self._printer = self.defaultPrinter + if options.get('printer') is not None: + self._printer = options.get('printer') + elif self.defaultPrinter is not None: + self._printer = self.defaultPrinter + else: + self._printer = Printer() self('running pyasn1 version %s' % __version__) for f in flags: if f not in flagMap: @@ -32,7 +53,7 @@ class Debug: return 'logger %s, flags %x' % (self._printer, self._flags) def __call__(self, msg): - self._printer('DBG: %s\n' % msg) + self._printer('[%s]: %s' % (self.timestamp(), msg)) def __and__(self, flag): return self._flags & flag @@ -40,6 +61,10 @@ class Debug: def __rand__(self, flag): return flag & self._flags + def timestamp(self): + return time.strftime('%H:%M:%S', time.localtime()) + \ + '.%.3d' % int((time.time() % 1) * 1000) + logger = 0 def setLogger(l): |