~launchpad-results/launchpad-results/trunk

« back to all changes in this revision

Viewing changes to lib/lpresults/xunit/logger.py

  • Committer: Marc Tardif
  • Date: 2011-07-25 17:11:24 UTC
  • Revision ID: marc.tardif@canonical.com-20110725171124-0gg693yorqv2sxbf
Added script for importing submissions from Launchpad.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2010-2011 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
__metaclass__ = type
 
5
 
 
6
__all__ = [
 
7
    "get_logger",
 
8
    ]
 
9
 
 
10
import re
 
11
import sys
 
12
import time
 
13
 
 
14
import logging
 
15
from logging import (
 
16
    StreamHandler,
 
17
    FileHandler,
 
18
    )
 
19
 
 
20
 
 
21
class Formatter(logging.Formatter):
 
22
    """Formatter encoding our preferred output format."""
 
23
 
 
24
    def __init__(self, fmt=None, datefmt=None):
 
25
        if fmt is None:
 
26
            fmt = '%(asctime)s %(levelname)-7s %(message)s'
 
27
        if datefmt is None:
 
28
            datefmt = "%Y-%m-%d %H:%M:%S"
 
29
        logging.Formatter.__init__(self, fmt, datefmt)
 
30
        self.converter = time.gmtime  # Output should be UTC
 
31
 
 
32
 
 
33
def reset_logger(logger):
 
34
    """Reset the state of the given logger instance."""
 
35
    for handler in logger.handlers[:]:
 
36
        handler.flush()
 
37
        try:
 
38
            handler.close()
 
39
        except KeyError:
 
40
            pass
 
41
        logger.removeHandler(handler)
 
42
 
 
43
 
 
44
def get_logger(level, log_stream=None, log_file=None, name=None):
 
45
    root_logger = logging.getLogger()
 
46
    reset_logger(root_logger)
 
47
 
 
48
    # Log to the given file or the default stream
 
49
    if log_file:
 
50
        handler = FileHandler(log_file)
 
51
    else:
 
52
        handler = StreamHandler(log_stream)
 
53
 
 
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)
 
58
 
 
59
    # Do the same for the formatter
 
60
    formatter = Formatter()
 
61
    handler.setFormatter(formatter)
 
62
    root_logger.addHandler(handler)
 
63
 
 
64
    # Create our own logger
 
65
    if name is None:
 
66
        name = sys.argv[0]
 
67
        name = re.sub(r".py[oc]?$", "", name)
 
68
 
 
69
    return logging.getLogger(name)