Project

General

Profile

root / branches / 1.1 / src / haizea / core / log.py @ 847

1
# -------------------------------------------------------------------------- #
2
# Copyright 2006-2009, University of Chicago                                 #
3
# Copyright 2008-2009, Distributed Systems Architecture Group, Universidad   #
4
# Complutense de Madrid (dsa-research.org)                                   #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
# -------------------------------------------------------------------------- #
18

    
19
import logging
20
import sys
21
from haizea.common.utils import get_clock
22
from haizea.common.constants import LOGLEVEL_VDEBUG, LOGLEVEL_STATUS
23

    
24
logging.addLevelName(LOGLEVEL_VDEBUG, "VDEBUG")
25
logging.addLevelName(LOGLEVEL_STATUS, "STATUS")
26

    
27
# Custom logger that uses our log record
28
class HaizeaLogger(logging.Logger):
29
    
30
    def makeRecord(self, name, lvl, fn, lno, msg, args, exc_info, func=None, extra=None):
31
        # Modify "extra" parameter keyword
32
        haizeatime = get_clock().get_time()
33
        extra = { "haizeatime" : haizeatime}
34
        if sys.version_info[1] <= 4:
35
            name = "[%s] %s" % (haizeatime, name)
36
            return logging.Logger.makeRecord(self, name, lvl, fn, lno, msg, args, exc_info)
37
        else:
38
            return logging.Logger.makeRecord(self, name, lvl, fn, lno, msg, args, exc_info, func, extra)
39
    
40
    def status(self, msg):
41
        self.log(logging.getLevelName("STATUS"), msg)
42

    
43
    def vdebug(self, msg):
44
        # Since there is such a huge amount of vdebug messages, we check the
45
        # log level manually to decide if we call the log function or not.
46
        # (this actually saves quite a bit of cycles spent in logging functions
47
        # that ultimately determine that the message doesn't have to printed)
48
        if self.getEffectiveLevel() == LOGLEVEL_VDEBUG:
49
            self.log(logging.getLevelName("VDEBUG"), msg)