GBSLogger.py

Go to the documentation of this file.
00001 import os
00002 import re
00003 
00004 import GBSConfig 
00005 import GBSTimeStamp
00006 
00007 class GBSLogger :
00008     """Internal logger - for reporting information about GBS itself"""
00009 
00010     def __init__(self):
00011         self.FATAL     = 6   # Crash and burn
00012         self.ERROR     = 5   # Something is definitely wrong but can continue
00013         self.WARNING   = 4   # Something is unusual but not definitely wrong 
00014         self.INFO      = 3   # Normal stuff user expects to see
00015         self.SYNOPSIS  = 2   # A bit more detail so user can see a what going on behind the scenes
00016                              #  includes object construction.
00017         self.DEBUG     = 1   # In depth debug level
00018 
00019         self.__loggerThresholdTerminal  = int(GBSConfig.GetConfigValue('LoggerThresholdTerminal'))
00020         self.__LoggerThresholdPermanent = int(GBSConfig.GetConfigValue('LoggerThresholdPermanent'))
00021 
00022     def GetLevelAsChar(self,level):
00023         """Return supplied level as a single char"""
00024         char = "?"
00025         if level == self.FATAL     : char = "F"
00026         if level == self.ERROR     : char = "E"
00027         if level == self.WARNING   : char = "W"
00028         if level == self.INFO      : char = "I"
00029         if level == self.SYNOPSIS  : char = "S"
00030         if level == self.DEBUG     : char = "D"
00031         return char
00032 
00033     def GetLoggerThreshold(self,stream = "Terminal"):
00034         """Return the current threshold level for the stream."""
00035         if stream != "Permanent": return self.__loggerThresholdTerminal 
00036         return self.__LoggerThresholdPermanent
00037      
00038     def SetLoggerThreshold(self,level,stream = "Terminal"):
00039         """Set new level threshold for the stream."""
00040         old_level = self.__loggerThresholdTerminal
00041         if stream != "Permanent":
00042             stream = "Terminal"
00043             if self.__loggerThresholdTerminal == level: return
00044             self.__loggerThresholdTerminal = level
00045         else:
00046             if self.__LoggerThresholdPermanent == level: return
00047             old_level = self.__LoggerThresholdPermanent
00048             self.__LoggerThresholdPermanent = level
00049         print "Changing %s loggerThreshold: %d -> %d" % (stream,old_level,level)
00050 
00051     def Log(self,caller,level,message) :
00052         """Send message to logger streams."""
00053         if level >= self.__loggerThresholdTerminal: print message
00054         if level < self.__LoggerThresholdPermanent: return
00055 
00056         # Logging to permanent stream
00057         time_stamp = GBSTimeStamp.GBSTimeStamp()
00058         task_name  = ""
00059         try:
00060             caller_type = caller.GetType()
00061             if caller_type == "GBSLogger": return  
00062             # So long as object type ends Task or Job assume it is one
00063             if re.search(r"Task$",caller_type): task_name = caller.GetName()
00064             if re.search(r"Job$",caller_type):  task_name = caller.GetParent().GetName()
00065         except: pass
00066         log_file = ""
00067         if task_name: log_file = GBSConfig.GetConfigValue('Logger-' + task_name + '-Directory')
00068         if log_file:
00069             log_file += "/gbs_global_" + task_name + "_" + time_stamp[0:10] + ".log"
00070         else:
00071             log_file = GBSConfig.GetConfigValue('LoggerGlobalDirectory')
00072             log_file += "/gbs_global_summary_" + time_stamp[0:10] + ".log"
00073         msg_prefx = time_stamp + " -" + self.GetLevelAsChar(level) + "-"\
00074                     + str(os.getpid()).rjust(7)  + " " + task_name.ljust(20)
00075         # Change any double quote in message to single quote so that we can use 'echo'
00076         message = re.compile(r'"').sub("'",message)
00077         os.system("echo \"%s %s\"  >> %s" % (msg_prefx,message,log_file))
00078         return
00079 
00080 #  Singleton object and access methods
00081 
00082 logger = GBSLogger()
00083 def Log(caller,level,message):                     logger.Log(caller,level,message)
00084 def GetLoggerThreshold(stream = "Terminal"):       return logger.GetLoggerThreshold(stream)
00085 def SetLoggerThreshold(level,stream = "Terminal"): logger.SetLoggerThreshold(level,stream)

Generated on Fri Mar 5 09:25:41 2010 for gbs by  doxygen 1.4.7