]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/util/log.py
e1487debb47f6ef3287dcb5e01f641d8360bd600
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / util / log.py
1 import nummedobj
2
3 from foolscap.logging import log
4 from twisted.python import log as tw_log
5
6 NOISY = log.NOISY # 10
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
13 BAD = log.BAD # 40
14
15
16 msg = log.msg
17
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.
22
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)
28
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
35
36     def log(self, msg, facility=None, parent=None, *args, **kwargs):
37         if facility is None:
38             facility = self._facility
39         if parent is None:
40             pmsgid = self._parentmsgid
41         if pmsgid is None:
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
46         return msgid
47
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)
54
55         if prefix:
56             self._prefix = "%s(%s): " % (self.__repr__(), prefix)
57         else:
58             self._prefix = "%s: " % (self.__repr__(),)
59
60     def log(self, msg="", facility=None, parent=None, *args, **kwargs):
61         return LogMixin.log(self, self._prefix + msg, facility, parent, *args, **kwargs)