]> git.ipfire.org Git - pakfire.git/blob - python/pakfire/logger.py
Bump version 0.9.9.
[pakfire.git] / python / pakfire / logger.py
1 #!/usr/bin/python
2 ###############################################################################
3 # #
4 # Pakfire - The IPFire package management system #
5 # Copyright (C) 2011 Pakfire development team #
6 # #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
11 # #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
16 # #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
19 # #
20 ###############################################################################
21
22 import logging
23 import time
24
25 def setup_logging(config=None):
26 """
27 This function initialized the logger that is enabled immediately.
28 """
29
30 l = logging.getLogger()
31
32 if len(l.handlers) > 1:
33 logging.debug("Logging was already set up. Don't do this again.")
34 return
35
36 # Remove all previous defined handlers.
37 for handler in l.handlers:
38 l.removeHandler(handler)
39
40 # Set level of logger always to DEBUG.
41 l.setLevel(logging.DEBUG)
42
43 # But only log all the debugging stuff on console if
44 # we are running in debugging mode.
45 handler = logging.StreamHandler()
46
47 if config and config.get("debug"):
48 handler.setLevel(logging.DEBUG)
49 else:
50 handler.setLevel(logging.INFO)
51
52 l.addHandler(handler)
53
54 # The configuration file always logs all messages.
55 if config:
56 handler = logging.FileHandler(config.get("logfile"))
57 handler.setLevel(logging.DEBUG)
58 l.addHandler(handler)
59
60
61 class BuildFormatter(logging.Formatter):
62 def __init__(self):
63 self._fmt = "[%(asctime)s] %(message)s"
64 self.datefmt = None
65
66 self.starttime = time.time()
67
68 def converter(self, recordtime):
69 """
70 This returns a timestamp relatively to the time when we started
71 the build.
72 """
73 recordtime -= self.starttime
74
75 return time.gmtime(recordtime)
76
77 def formatTime(self, record, datefmt=None):
78 ct = self.converter(record.created)
79 t = time.strftime("%H:%M:%S", ct)
80 s = "%s,%03d" % (t, record.msecs)
81 return s