Source code for logquacious.log_manager
import logging
from . import utils
from .log_context import LogContext
from .backport_configurable_stacklevel import PatchedLoggerMixin
[docs]class LogManager(PatchedLoggerMixin):
"""Logging manager for use as a logger, decorator, or contextmanager.
>>> log = LogManager(__name__)
>>> log.info('Normal logging statement')
[INFO] Normal logging statement
>>> @log.context.info
... def logged_function():
... log.info('Inside logged_function')
[DEBUG] Start logged_function
[INFO] Inside logged_function
[DEBUG] Finish logged_function
>>> with log.context.info("context manager"):
... log.info("Inside context manager")
[DEBUG] Start context manager
[INFO] Inside context manger
[DEBUG] Finish context manager
"""
def __init__(self, name=None, context_templates=None):
super(LogManager, self).__init__()
self.logger = utils.get_logger(name)
self.context = LogContext(self.logger, context_templates)
# Alias `logging.Logger` methods:
self.log = self.logger.log
self.debug = self.logger.debug
self.info = self.logger.info
self.warning = self.logger.warning
self.error = self.logger.error
self.exception = self.logger.exception
self.fatal = self.logger.fatal
[docs] def and_suppress(self, allowed_exceptions,
msg="Suppressed error and logging",
level=logging.ERROR, exc_info=True, stacklevel=3):
"""Context manager that logs and suppresses given error.
Arguments:
allowed_exceptions: Exception(s) to log and suppress.
msg: Message logged for exceptions.
level: Logging level for logging exceptions.
exc_info: If True, include exception info.
stacklevel: Stacklevel of logging statement. Defaults to level 3
since this method (level=2) defers functionality to a helper
utility (level=1), but logging should use the context where
this is called (level=3).
"""
def on_exception():
with self.temp_monkey_patched_logger():
self.log(level, msg, exc_info=exc_info, stacklevel=stacklevel)
return True # Return True suppresses error in __exit__
return utils.HandleException(allowed_exceptions, on_exception)
[docs] def and_reraise(self, allowed_exceptions,
msg="Logging error and reraising",
level=logging.ERROR, exc_info=True, stacklevel=3):
"""Context manager that logs and reraises given error.
Arguments:
allowed_exceptions: Exception(s) to log before reraising.
msg: Message logged for exceptions.
level: Logging level for logging exceptions.
exc_info: If True, include exception info.
stacklevel: Stacklevel of logging statement. Defaults to level 3
since this method (level=2) defers functionality to a helper
utility (level=1), but logging should use the context where
this is called (level=3).
"""
def on_exception():
with self.temp_monkey_patched_logger():
self.log(level, msg, exc_info=exc_info, stacklevel=stacklevel)
raise
return utils.HandleException(allowed_exceptions, on_exception)