[CalendarServer-changes] [11326] CalendarServer/trunk/twext/python
source_changes at macosforge.org
source_changes at macosforge.org
Mon Jun 10 14:29:13 PDT 2013
Revision: 11326
http://trac.calendarserver.org//changeset/11326
Author: wsanchez at apple.com
Date: 2013-06-10 14:29:13 -0700 (Mon, 10 Jun 2013)
Log Message:
-----------
log.emit() now takes a format, instead of a message.
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-07 16:43:52 UTC (rev 11325)
+++ CalendarServer/trunk/twext/python/log.py 2013-06-10 21:29:13 UTC (rev 11326)
@@ -50,6 +50,7 @@
# TODO List:
#
# * Replace message argument with format argument
+# * Filter in observers, not emit()
#
__all__ = [
@@ -244,19 +245,21 @@
return "<%s %r>" % (self.__class__.__name__, self.namespace)
- def emit(self, level, message=None, **kwargs):
+ def emit(self, level, format=None, **kwargs):
"""
Emit a log message to all log observers at the given level.
@param level: a L{LogLevel}
- @param message: a message
+ @param format: a message format using PEP3101 formatting. All
+ variables in C{kwargs} are available.
@param kwargs: additional keyword parameters to include with the
message.
"""
if level not in LogLevel.iterconstants():
- raise InvalidLogLevelError(level)
+ self.failure(Failure(InvalidLogLevelError(level)))
+ level = LogLevel.error
# FIXME: Filtering should be done by the log observer(s)
if not self.willLogAtLevel(level):
@@ -274,10 +277,6 @@
if level in pythonLogLevelMapping:
kwargs["logLevel"] = pythonLogLevelMapping[level]
- if message:
- kwargs["legacyMessage"] = message
- kwargs["format"] = "%(legacyMessage)s"
-
prefix = "[%(namespace)s#%(levelName)s] "
if "failure" in kwargs:
@@ -288,9 +287,21 @@
why = "Unhandled Error"
kwargs["why"] = "%s%s" % (prefix % kwargs, why)
- if "format" in kwargs:
- kwargs["format"] = "%s%s" % (prefix, kwargs["format"])
+ if format:
+ kwargs["log_format"] = format
+ #
+ # Create an object that implements __str__() in order to
+ # defer the work of formatting until it's needed by a
+ # legacy log observer.
+ #
+ class LegacyFormatStub(object):
+ def __str__(self):
+ return format.format(**kwargs)
+
+ kwargs["format"] = prefix + "%(log_legacy)s"
+ kwargs["log_legacy"] = LegacyFormatStub()
+
twistedLogMessage(**kwargs)
@@ -390,8 +401,8 @@
#
# Attach methods to Logger
#
- def log_emit(self, message=None, **kwargs):
- self.emit(level, message, **kwargs)
+ def log_emit(self, format=None, **kwargs):
+ self.emit(level, format, **kwargs)
def will_emit(self):
return self.willLogAtLevel(level)
Modified: CalendarServer/trunk/twext/python/test/test_log.py
===================================================================
--- CalendarServer/trunk/twext/python/test/test_log.py 2013-06-07 16:43:52 UTC (rev 11325)
+++ CalendarServer/trunk/twext/python/test/test_log.py 2013-06-10 21:29:13 UTC (rev 11326)
@@ -72,7 +72,7 @@
def __str__(self):
- return "<LogComposedObject %s>" % (self.state,)
+ return "<LogComposedObject {state}>".format(state=self.state)
@@ -126,7 +126,7 @@
"""
obj = LogComposedObject("hello")
log = obj.log
- log.error(format="Hello. %(source)s")
+ log.error("Hello. {source}")
stuff = twistedLogging.textFromEventDict(log.eventDict)
self.assertIn("Hello. <LogComposedObject hello>", stuff)
@@ -137,7 +137,7 @@
Logger.
"""
for level in LogLevel.iterconstants():
- message = "This is a %s message" % (level.name,)
+ message = "This is a {level} message".format(level=level.name)
log = TestLogger()
method = getattr(log, level.name)
@@ -306,6 +306,18 @@
self.assertFalse(log.willLogAtLevel(level))
+ def test_logInvalidLogLevel(self):
+ """
+ Test passing in a bogus log level to C{emit()}.
+ """
+ log = TestLogger()
+
+ log.emit("*bogus*")
+
+ errors = self.flushLoggedErrors(InvalidLogLevelError)
+ self.assertEquals(len(errors), 1)
+
+
def test_legacy_msg(self):
"""
Test LegacyLogger's log.msg()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130610/cbbdade6/attachment.html>
More information about the calendarserver-changes
mailing list