~ubuntu-branches/ubuntu/precise/enigmail/precise-security

« back to all changes in this revision

Viewing changes to testing/mozbase/mozlog/mozlog/logger.py

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-11-12 16:36:01 UTC
  • mfrom: (0.12.15)
  • Revision ID: package-import@ubuntu.com-20121112163601-t8e8skdfi3ni9iqp
Tags: 2:1.4.6-0ubuntu0.12.04.1
* New upstream release v1.4.6
  - see LP: #1080212 for USN information
* Drop unneeded patches
  - remove debian/patches/correct-version-number.diff
  - remove debian/patches/dont_register_cids_multiple_times.diff
  - update debian/patches/series
* Support building in an objdir
  - update debian/rules

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# This Source Code Form is subject to the terms of the Mozilla Public
 
2
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
 
3
# You can obtain one at http://mozilla.org/MPL/2.0/.
 
4
 
 
5
from logging import getLogger as getSysLogger
 
6
from logging import *
 
7
# Some of the build slave environments don't see the following when doing
 
8
# 'from logging import *'
 
9
# see https://bugzilla.mozilla.org/show_bug.cgi?id=700415#c35
 
10
from logging import getLoggerClass, addLevelName, setLoggerClass, shutdown
 
11
 
 
12
_default_level = INFO
 
13
_LoggerClass = getLoggerClass()
 
14
 
 
15
# Define mozlog specific log levels
 
16
START      = _default_level + 1
 
17
END        = _default_level + 2
 
18
PASS       = _default_level + 3
 
19
KNOWN_FAIL = _default_level + 4
 
20
FAIL       = _default_level + 5
 
21
# Define associated text of log levels
 
22
addLevelName(START, 'TEST-START')
 
23
addLevelName(END, 'TEST-END')
 
24
addLevelName(PASS, 'TEST-PASS')
 
25
addLevelName(KNOWN_FAIL, 'TEST-KNOWN-FAIL')
 
26
addLevelName(FAIL, 'TEST-UNEXPECTED-FAIL')
 
27
 
 
28
class _MozLogger(_LoggerClass):
 
29
    """
 
30
    MozLogger class which adds three convenience log levels
 
31
    related to automated testing in Mozilla
 
32
    """
 
33
    def testStart(self, message, *args, **kwargs):
 
34
        self.log(START, message, *args, **kwargs)
 
35
 
 
36
    def testEnd(self, message, *args, **kwargs):
 
37
        self.log(END, message, *args, **kwargs)
 
38
 
 
39
    def testPass(self, message, *args, **kwargs):
 
40
        self.log(PASS, message, *args, **kwargs)
 
41
 
 
42
    def testFail(self, message, *args, **kwargs):
 
43
        self.log(FAIL, message, *args, **kwargs)
 
44
 
 
45
    def testKnownFail(self, message, *args, **kwargs):
 
46
        self.log(KNOWN_FAIL, message, *args, **kwargs)
 
47
 
 
48
class _MozFormatter(Formatter):
 
49
    """
 
50
    MozFormatter class used for default formatting
 
51
    This can easily be overriden with the log handler's setFormatter()
 
52
    """
 
53
    level_length = 0
 
54
    max_level_length = len('TEST-START')
 
55
 
 
56
    def __init__(self):
 
57
        pass
 
58
 
 
59
    def format(self, record):
 
60
        record.message = record.getMessage()
 
61
 
 
62
        # Handles padding so record levels align nicely
 
63
        if len(record.levelname) > self.level_length:
 
64
            pad = 0
 
65
            if len(record.levelname) <= self.max_level_length:
 
66
                self.level_length = len(record.levelname)
 
67
        else:
 
68
            pad = self.level_length - len(record.levelname) + 1
 
69
        sep = '|'.rjust(pad)
 
70
        fmt = '%(name)s %(levelname)s ' + sep + ' %(message)s'
 
71
        return fmt % record.__dict__
 
72
 
 
73
def getLogger(name, logfile=None):
 
74
    """
 
75
    Returns the logger with the specified name.
 
76
    If the logger doesn't exist, it is created.
 
77
 
 
78
    name       - The name of the logger to retrieve
 
79
    [filePath] - If specified, the logger will log to the specified filePath
 
80
                 Otherwise, the logger logs to stdout
 
81
                 This parameter only has an effect if the logger doesn't exist
 
82
    """
 
83
    setLoggerClass(_MozLogger)
 
84
 
 
85
    if name in Logger.manager.loggerDict:
 
86
        return getSysLogger(name)
 
87
 
 
88
    logger = getSysLogger(name)
 
89
    logger.setLevel(_default_level)
 
90
 
 
91
    if logfile:
 
92
        handler = FileHandler(logfile)
 
93
    else:
 
94
        handler = StreamHandler()
 
95
    handler.setFormatter(_MozFormatter())
 
96
    logger.addHandler(handler)
 
97
    return logger
 
98