00001
00002
00003
00004 """Athena Python-side logging."""
00005
00006 import sys
00007 import Constants as Constants
00008
00009
00010
00011 __version__ = '1.0.2'
00012 __author__ = 'Wim Lavrijsen (WLavrijsen@lbl.gov)'
00013
00014 __all__ = [ 'log', 'logging', 'AthError' ]
00015
00016
00017
00018
00019 import logging
00020
00021
00022
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
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
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:
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 )