1
# Copyright 2010-2011 Canonical Ltd. This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
21
class Formatter(logging.Formatter):
22
"""Formatter encoding our preferred output format."""
24
def __init__(self, fmt=None, datefmt=None):
26
fmt = '%(asctime)s %(levelname)-7s %(message)s'
28
datefmt = "%Y-%m-%d %H:%M:%S"
29
logging.Formatter.__init__(self, fmt, datefmt)
30
self.converter = time.gmtime # Output should be UTC
33
def reset_logger(logger):
34
"""Reset the state of the given logger instance."""
35
for handler in logger.handlers[:]:
41
logger.removeHandler(handler)
44
def get_logger(level, log_stream=None, log_file=None, name=None):
45
root_logger = logging.getLogger()
46
reset_logger(root_logger)
48
# Log to the given file or the default stream
50
handler = FileHandler(log_file)
52
handler = StreamHandler(log_stream)
54
# Set the level on the handler rather than the logger
55
level = logging.getLevelName(level.upper())
56
handler.setLevel(level)
57
root_logger.setLevel(0)
59
# Do the same for the formatter
60
formatter = Formatter()
61
handler.setFormatter(formatter)
62
root_logger.addHandler(handler)
64
# Create our own logger
67
name = re.sub(r".py[oc]?$", "", name)
69
return logging.getLogger(name)