| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

Logging.py

Go to the documentation of this file.
00001 # File: AthenaCommon/python/Logging.py
00002 # Author: Wim Lavrijsen (WLavrijsen@lbl.gov)
00003 
00004 """Athena Python-side logging."""
00005 
00006 import sys
00007 import Constants as Constants
00008 
00009 
00010 ### data _____________________________________________________________________
00011 __version__ = '1.0.2'
00012 __author__  = 'Wim Lavrijsen (WLavrijsen@lbl.gov)'
00013 
00014 __all__ = [ 'log', 'logging', 'AthError' ]
00015 
00016 
00017 
00018 ### basic logging and messages -----------------------------------------------
00019 import logging
00020 
00021 
00022 ### configure logger module --------------------------------------------------
00023 logging.VERBOSE = logging.DEBUG - 1
00024 logging.ALL     = logging.DEBUG - 2
00025 logging.addLevelName( logging.VERBOSE, 'VERBOSE' )
00026 logging.addLevelName( logging.ALL, 'ALL' )
00027 
00028 
00029 ### specialized logger to allow setting with Gaudi message levels ============
00030 class AthenaLogger( logging._loggerClass, object ):
00031    __levelmap = { Constants.ALL      : logging.ALL,
00032                   Constants.VERBOSE  : logging.VERBOSE,
00033                   Constants.DEBUG    : logging.DEBUG,
00034                   Constants.INFO     : logging.INFO,
00035                   Constants.WARNING  : logging.WARNING,
00036                   Constants.ERROR    : logging.ERROR,
00037                   Constants.FATAL    : logging.FATAL }
00038 
00039    def setLevel( self, level ):
00040       try:
00041          level = self.__levelmap[ level ]
00042       except KeyError:
00043          pass
00044 
00045       super( AthenaLogger, self ).setLevel( level )
00046 
00047    @classmethod
00048    def mapLevelLoggingToGaudi( self, level ):
00049       for k,v in self.__levelmap.items():
00050          if v == level:
00051             return k
00052       return level
00053 
00054    @classmethod
00055    def mapLevelGaudiToLogging( self, level ):
00056       try:
00057          return self.__levelmap[ level ]
00058       except KeyError:
00059          return level
00060 
00061    def all( self, msg, *args, **kwargs):
00062       if self.manager.disable >= logging.ALL:
00063          return
00064       if logging.ALL >= self.getEffectiveLevel():
00065          apply(self._log, (logging.ALL, msg, args), kwargs)
00066 
00067    def verbose( self, msg, *args, **kwargs):
00068       if self.manager.disable >= logging.VERBOSE:
00069          return
00070       if logging.VERBOSE >= self.getEffectiveLevel():
00071          apply(self._log, (logging.VERBOSE, msg, args), kwargs)
00072 
00073 
00074 logging.setLoggerClass( AthenaLogger )
00075 
00076 
00077 ### configure logger ---------------------------------------------------------
00078 log = logging.getLogger()
00079 log.name = "GaudiKernel"
00080 hdlr = logging.StreamHandler( sys.stdout )
00081 frmt = logging.Formatter( "# Py:%(name)-14s%(levelname)8s %(message)s" )
00082 hdlr.setFormatter( frmt )
00083 for h in log.handlers:                 # basicConfig handler already installed?
00084    if h.formatter._fmt == logging.BASIC_FORMAT:
00085       log.removeHandler( h )
00086       break
00087 log.addHandler( hdlr )
00088 
00089 def AthError( descr ):
00090    raise RuntimeError( descr )               # <== Note exception!
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 19:56:58 2011 for GaudiKernel by doxygen 1.4.7