+import nummedobj
+
from foolscap.logging import log
from twisted.python import log as tw_log
if 'level' not in kwargs:
kwargs['level'] = log.UNUSUAL
return log.err(*args, **kwargs)
+
+class LogMixin(object):
+ """ I remember a msg id and a facility and pass them to log.msg() """
+ def __init__(self, facility=None, grandparentmsgid=None):
+ self._facility = facility
+ self._grandparentmsgid = grandparentmsgid
+ self._parentmsgid = None
+
+ def log(self, msg, facility=None, parent=None, *args, **kwargs):
+ if facility is None:
+ facility = self._facility
+ if parent is None:
+ pmsgid = self._parentmsgid
+ if pmsgid is None:
+ pmsgid = self._grandparentmsgid
+ msgid = log.msg(msg, facility=facility, parent=pmsgid, *args, **kwargs)
+ if self._parentmsgid is None:
+ self._parentmsgid = msgid
+ return msgid
+
+class PrefixingLogMixin(nummedobj.NummedObj, LogMixin):
+ """ I prepend a prefix to each msg, which includes my class and instance number as well as
+ a prefix supplied by my subclass. """
+ def __init__(self, facility=None, grandparentmsgid=None, prefix=''):
+ nummedobj.NummedObj.__init__(self)
+ LogMixin.__init__(self, facility, grandparentmsgid)
+
+ if prefix:
+ self._prefix = "%s(%s): " % (self.__repr__(), prefix)
+ else:
+ self._prefix = "%s: " % (self.__repr__(),)
+
+ def log(self, msg, facility=None, parent=None, *args, **kwargs):
+ return LogMixin.log(self, self._prefix + msg, facility, parent, *args, **kwargs)