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
00012 self.ERROR = 5
00013 self.WARNING = 4
00014 self.INFO = 3
00015 self.SYNOPSIS = 2
00016
00017 self.DEBUG = 1
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
00057 time_stamp = GBSTimeStamp.GBSTimeStamp()
00058 task_name = ""
00059 try:
00060 caller_type = caller.GetType()
00061 if caller_type == "GBSLogger": return
00062
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
00076 message = re.compile(r'"').sub("'",message)
00077 os.system("echo \"%s %s\" >> %s" % (msg_prefx,message,log_file))
00078 return
00079
00080
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)