[CalendarServer-changes] [11339] CalendarServer/trunk/twext/python

source_changes at macosforge.org source_changes at macosforge.org
Thu Jun 13 14:40:03 PDT 2013


Revision: 11339
          http://trac.calendarserver.org//changeset/11339
Author:   wsanchez at apple.com
Date:     2013-06-13 14:40:03 -0700 (Thu, 13 Jun 2013)
Log Message:
-----------
No more filtering in Logger.emit(); add a new LogLevelFilteringLogObserverWrapper which handles that.
Get rid of "_enabled" truthy thing for testing whether a logger will log; it's totally unused.  (eg. log.error_enabled)

Modified Paths:
--------------
    CalendarServer/trunk/twext/python/log.py
    CalendarServer/trunk/twext/python/test/test_log.py

Modified: CalendarServer/trunk/twext/python/log.py
===================================================================
--- CalendarServer/trunk/twext/python/log.py	2013-06-13 20:20:14 UTC (rev 11338)
+++ CalendarServer/trunk/twext/python/log.py	2013-06-13 21:40:03 UTC (rev 11339)
@@ -50,12 +50,12 @@
 #
 # TODO List:
 #
-# * Filter in observers, not emit() - use a wrapper observer
 # * Expose the default log observer (TheLogPublisher)
 # * Specifically, expose addObserver and removeObserver so one can register other observers
 # * Check the unicode situation for sanity
 # * Change the default log observer to something non-legacy
 # * Register a legacy observer with Twisted's logging that forwards to this module
+# * Monkey patch logging in Twisted to use our LegacyLogger to sprinkle betterness everywhere
 #
 
 __all__ = [
@@ -69,6 +69,7 @@
     "ILogObserver",
     "ILegacyLogObserver",
     "LogPublisher",
+    "LogLevelFilteringLogObserverWrapper",
     "LegacyLogObserverWrapper",
     #"StandardIOObserver",
 ]
@@ -329,12 +330,9 @@
                 logger = self,
             )
             #level = LogLevel.error
+            # FIXME: continue to emit?
             return
 
-        # FIXME: Filtering should be done by the log observer(s)
-        if not self.willLogAtLevel(level):
-            return
-
         event = kwargs
         event.update(
             log_logger    = self,
@@ -396,7 +394,6 @@
         setLogLevelForNamespace(self.namespace, level)
 
 
-    # FIXME: get rid of this
     def willLogAtLevel(self, level):
         """
         @param level: a L{LogLevel}
@@ -468,7 +465,6 @@
     log_emit.__doc__ = doc
 
     setattr(Logger, level.name, log_emit)
-    setattr(Logger, level.name + "_enabled", property(will_emit))
 
 for level in LogLevel.iterconstants(): 
     bindEmit(level)
@@ -502,15 +498,15 @@
 @implementer(ILogObserver)
 class LogPublisher(object):
     """
-    Log publisher that fans out events to other observers.
+    I{ILogObserver} that fans out events to other observers.
 
     Keeps track of a set of L{ILogObserver} objects and forwards
     events to each.
     """
     log = Logger()
 
-    def __init__(self):
-        self._observers = set()
+    def __init__(self, *observers):
+        self._observers = set(observers)
 
 
     @property
@@ -561,10 +557,40 @@
 
 
 @implementer(ILogObserver)
+class LogLevelFilteringLogObserverWrapper(object):
+    """
+    L{ILogObserver} that wraps another L{ILogObserver}, but does not
+    forward events which have a L{LogLevel} lower than is configured
+    for the event's namespace.
+    """
+
+    def __init__(self, observer):
+        """
+        @param observer: an L{ILogObserver} to which this observer
+            will forward events.
+        """
+        self.observer = observer
+
+
+    def eventShouldForward(self, event):
+        if event["log_level"] >= logLevelForNamespace(event["log_namespace"]):
+            return True
+        else:
+            return False
+
+
+    def __call__(self, event):
+        if self.eventShouldForward(event):
+            self.observer(event)
+
+
+
+ at implementer(ILogObserver)
 class LegacyLogObserverWrapper(object):
     """
     L{ILogObserver} that wraps an L{ILegacyLogObserver}.
     """
+
     def __init__(self, legacyObserver):
         """
         @param legacyObserver: an L{ILegacyLogObserver} to which this
@@ -612,11 +638,12 @@
 
 
 
-TheLogPublisher = LogPublisher()
-TheLogPublisher.addObserver(LegacyLogObserverWrapper(twistedLogMessage))
+TheLegacyLogObserver = LegacyLogObserverWrapper(twistedLogMessage)
+TheFilteredLogPublisher = LogPublisher(TheLegacyLogObserver) # Add post-filtering observers here
+TheFilteringLogObserver = LogLevelFilteringLogObserverWrapper(TheFilteredLogPublisher)
+TheLogPublisher = LogPublisher(TheFilteringLogObserver) # Add pre-filtering observers here
 
 
-
 ######################################################################
 # FIXME: This may not be needed; look into removing it.
 

Modified: CalendarServer/trunk/twext/python/test/test_log.py
===================================================================
--- CalendarServer/trunk/twext/python/test/test_log.py	2013-06-13 20:20:14 UTC (rev 11338)
+++ CalendarServer/trunk/twext/python/test/test_log.py	2013-06-13 21:40:03 UTC (rev 11339)
@@ -323,21 +323,6 @@
                 self.assertTrue(log.willLogAtLevel(level), (level, log.level()))
 
 
-    def test_logMethodTruthiness_Logger(self):
-        """
-        Logger's log level functions/methods have true/false
-        value based on whether they will log.
-        """
-        log = Logger()
-
-        for level in LogLevel.iterconstants():
-            enabled = getattr(log, level.name + "_enabled")
-            if enabled:
-                self.assertTrue(log.willLogAtLevel(level))
-            else:
-                self.assertFalse(log.willLogAtLevel(level))
-
-
     def test_logInvalidLogLevel(self):
         """
         Test passing in a bogus log level to C{emit()}.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130613/38567a34/attachment-0001.html>


More information about the calendarserver-changes mailing list