3 from foolscap.logging import log
4 from twisted.python import log as tw_log
7 OPERATIONAL = log.OPERATIONAL # 20
8 UNUSUAL = log.UNUSUAL # 23
9 INFREQUENT = log.INFREQUENT # 25
10 CURIOUS = log.CURIOUS # 28
11 WEIRD = log.WEIRD # 30
12 SCARY = log.SCARY # 35
18 # If log.err() happens during a unit test, the unit test should fail. We
19 # accomplish this by sending it to twisted.log too. When a WEIRD/SCARY/BAD
20 # thing happens that is nevertheless handled, use log.msg(failure=f,
21 # level=WEIRD) instead.
23 def err(failure=None, _why=None, **kwargs):
24 tw_log.err(failure, _why, **kwargs)
25 if 'level' not in kwargs:
26 kwargs['level'] = log.UNUSUAL
27 return log.err(failure, _why, **kwargs)
29 class LogMixin(object):
30 """ I remember a msg id and a facility and pass them to log.msg() """
31 def __init__(self, facility=None, grandparentmsgid=None):
32 self._facility = facility
33 self._grandparentmsgid = grandparentmsgid
34 self._parentmsgid = None
36 def log(self, msg, facility=None, parent=None, *args, **kwargs):
38 facility = self._facility
40 pmsgid = self._parentmsgid
42 pmsgid = self._grandparentmsgid
43 msgid = log.msg(msg, facility=facility, parent=pmsgid, *args, **kwargs)
44 if self._parentmsgid is None:
45 self._parentmsgid = msgid
48 class PrefixingLogMixin(nummedobj.NummedObj, LogMixin):
49 """ I prepend a prefix to each msg, which includes my class and instance number as well as
50 a prefix supplied by my subclass. """
51 def __init__(self, facility=None, grandparentmsgid=None, prefix=''):
52 nummedobj.NummedObj.__init__(self)
53 LogMixin.__init__(self, facility, grandparentmsgid)
56 self._prefix = "%s(%s): " % (self.__repr__(), prefix)
58 self._prefix = "%s: " % (self.__repr__(),)
60 def log(self, msg="", facility=None, parent=None, *args, **kwargs):
61 return LogMixin.log(self, self._prefix + msg, facility, parent, *args, **kwargs)