summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt1
-rw-r--r--pysnmp/debug.py34
2 files changed, 28 insertions, 7 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index ad58de22..66c38b81 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -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 911a4b7c..83f92bfb 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