summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2014-10-26 16:16:09 +0000
committerelie <elie>2014-10-26 16:16:09 +0000
commita4d83c864a9bad7702c20413ef23c9f6e7c25dfc (patch)
tree2f4b07c1b13353428cbd9351332c8da34a745356
parente4905f562d2f68b4378f4f34712ad77fd2b8a475 (diff)
downloadpysnmp-a4d83c864a9bad7702c20413ef23c9f6e7c25dfc.tar.gz
built-in debugging is now based on Python logging module
-rw-r--r--CHANGES1
-rw-r--r--pysnmp/debug.py34
2 files changed, 28 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index ad58de2..66c38b8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -30,6 +30,7 @@ Revision 4.2.6rc0
rebuilt on top of these new optimized versions keeping all the legacy
for compatibility reasons. These classes no more keep references to
SnmpEngine what makes them reusable with many SnmpEngine class instances.
+- Built-in debugging is now based on Python logging module.
- Example on a single Transport Dispatcher use with multiple SnmpEngine's
in oneliner AsyncCommandGenerator & AsyncNotificationOriginator based
applicatons added.
diff --git a/pysnmp/debug.py b/pysnmp/debug.py
index 911a4b7..83f92bf 100644
--- a/pysnmp/debug.py
+++ b/pysnmp/debug.py
@@ -1,5 +1,5 @@
-import sys
import time
+import logging
from pyasn1.compat.octets import octs2ints
from pysnmp import error
from pysnmp import __version__
@@ -31,13 +31,33 @@ flagMap = {
'all': flagAll
}
+class Printer:
+ def __init__(self, logger=None, handler=None, formatter=None):
+ if logger is None:
+ logger = logging.getLogger('pysnmp')
+ 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.PySnmpError('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 pysnmp version %s' % __version__)
for f in flags:
inverse = f and f[0] in ('!', '~')
@@ -57,7 +77,7 @@ class Debug:
return 'logger %s, flags %x' % (self._printer, self._flags)
def __call__(self, msg):
- self._printer('DBG: [%s]: %s\n' % (self.timestamp(), msg))
+ self._printer('[%s]: %s' % (self.timestamp(), msg))
def __and__(self, flag):
return self._flags & flag