[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