From c84f01698874902863396e82a248f5fd6ec59d0e Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Tue, 21 Sep 2010 11:25:39 +0000 Subject: Added some methods to LoggerAdapter, and updated documentation. --- Doc/library/logging.rst | 19 +++++++++++-------- Lib/logging/__init__.py | 14 ++++++++++++++ Lib/logging/handlers.py | 2 ++ Lib/test/test_logging.py | 2 +- Misc/NEWS | 4 ++++ 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index 5d62d50..c0e114441 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -2599,8 +2599,8 @@ should, then :meth:`flush` is expected to do the needful. .. method:: flush() For a :class:`MemoryHandler`, flushing means just sending the buffered - records to the target, if there is one. Override if you want different - behavior. + records to the target, if there is one. The buffer is also cleared when + this happens. Override if you want different behavior. .. method:: setTarget(target) @@ -2972,15 +2972,18 @@ __ context-info_ 'extra'. The return value is a (*msg*, *kwargs*) tuple which has the (possibly modified) versions of the arguments passed in. -In addition to the above, :class:`LoggerAdapter` supports all the logging +In addition to the above, :class:`LoggerAdapter` supports the following methods of :class:`Logger`, i.e. :meth:`debug`, :meth:`info`, :meth:`warning`, -:meth:`error`, :meth:`exception`, :meth:`critical` and :meth:`log`. These -methods have the same signatures as their counterparts in :class:`Logger`, so -you can use the two types of instances interchangeably. +:meth:`error`, :meth:`exception`, :meth:`critical`, :meth:`log`, +:meth:`isEnabledFor`, :meth:`getEffectiveLevel`, :meth:`setLevel`, +:meth:`hasHandlers`. These methods have the same signatures as their +counterparts in :class:`Logger`, so you can use the two types of instances +interchangeably. .. versionchanged:: 3.2 - The :meth:`isEnabledFor` method was added to :class:`LoggerAdapter`. This - method delegates to the underlying logger. + The :meth:`isEnabledFor`, :meth:`getEffectiveLevel`, :meth:`setLevel` and + :meth:`hasHandlers` methods were added to :class:`LoggerAdapter`. These + methods delegate to the underlying logger. Thread Safety diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 42b957c..b7086d5 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -1400,6 +1400,8 @@ class LoggerAdapter(object): msg, kwargs = self.process(msg, kwargs) self.logger.warning(msg, *args, **kwargs) + warn = warning + def error(self, msg, *args, **kwargs): """ Delegate an error call to the underlying logger, after adding @@ -1433,12 +1435,24 @@ class LoggerAdapter(object): msg, kwargs = self.process(msg, kwargs) self.logger.log(level, msg, *args, **kwargs) + def setLevel(self, level): + """ + Set the specified level on the underlying logger. + """ + self.logger.setLevel(level) + def isEnabledFor(self, level): """ See if the underlying logger is enabled for the specified level. """ return self.logger.isEnabledFor(level) + def getEffectiveLevel(self): + """ + Get the effective level for the underlying logger. + """ + return self.logger.getEffectiveLevel() + def hasHandlers(self): """ See if the underlying logger has any handlers. diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index 744f59b..ce0673d 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -1131,6 +1131,8 @@ class MemoryHandler(BufferingHandler): For a MemoryHandler, flushing means just sending the buffered records to the target, if there is one. Override if you want different behaviour. + + The record buffer is also cleared by this operation. """ if self.target: for record in self.buffer: diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 7506dba..c5d8bac 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -154,7 +154,7 @@ class BuiltinLevelsTest(BaseTest): ERR = logging.getLogger("ERR") ERR.setLevel(logging.ERROR) - INF = logging.getLogger("INF") + INF = logging.LoggerAdapter(logging.getLogger("INF"), {}) INF.setLevel(logging.INFO) DEB = logging.getLogger("DEB") DEB.setLevel(logging.DEBUG) diff --git a/Misc/NEWS b/Misc/NEWS index 9ac3e0d..cd93537 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -58,6 +58,10 @@ Core and Builtins Library ------- +- logging: hasHandlers method was added to Logger, and isEnabledFor, + getEffectiveLevel, hasHandlers and setLevel were added to LoggerAdapter. + LoggerAdapter was introduced into the unit tests for logging. + - Issue #1686: Fix string.Template when overriding the pattern attribute. - Issue #9854: SocketIO objects now observe the RawIOBase interface in -- cgit v0.12