built-in debugging is now based on Python logging module

pull/45/head
elie 2014-10-26 16:16:09 +00:00
parent dfec7984e1
commit 0e74a79062
2 changed files with 28 additions and 7 deletions

View File

@ -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.

View File

@ -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