def __GetParentModule__(Test = 0) : # impStepList[0] : __GetParentModlue__ 을 호출한 함수 # impStepList[1] : Log.py # impStepList[2] : Log.py를 Import 한 modlue try : impStepList = extract_stack() impStepList.reverse() parentModulePath = impStepList[2][0] except : import psyco frame = psyco._getemulframe(2) parentModulePath = frame.f_code.co_filename parentModule = None for name in sys.modules : moduleInfo = str(sys.modules[name]) if (moduleInfo.find(parentModulePath) != -1) : parentModule = sys.modules[name] # 상위 모듈 획득 break elif (moduleInfo.find("__main__") != -1 and \ moduleInfo.find("<frozen>") != -1) : # freeze로 컴파일한경우... parentModule = sys.modules[name] # 상위 모듈 획득 break return parentModule
def Watch (self, variableName, level=0): """variableName의 간략한 정보를 출력하기 위한 Debug 함수""" if(level > self.level) : return paramDict = { } try : stack = extract_stack ( )[-2:][0] actualCall = stack[3] if ( actualCall is None ): actualCall = "watch ( [unknown] )" left = string.find ( actualCall, '(' ) right = string.rfind ( actualCall, ')' ) paramDict["varName"] = string.strip ( actualCall[left+1:right] ) # everything between '(' and ')' paramDict["varType"] = str ( type ( variableName ) )[7:-2] paramDict["value"] = repr ( variableName ) paramDict["lineNumber"] = stack[1] paramDict["methodName"] = stack[2] paramDict["fileName"] = os.path.basename(stack[0]) except: import psyco frame = psyco._getemulframe(1) actualCall = frame.f_code.co_names[-3] paramDict["varName"] = string.strip ( actualCall ) paramDict["varType"] = str ( type ( variableName ) )[7:-2] paramDict["value"] = repr ( variableName ) paramDict["methodName"] = frame.f_code.co_name paramDict["lineNumber"] = frame.f_lineno paramDict["fileName"] = os.path.basename(frame.f_code.co_filename) paramDict["time"] = time.strftime("%Y/%m/%d %H:%M:%S") paramDict["pid"] = self.pid outStr = '[%(time)s] %(pid)s, "%(fileName)s", %(lineNumber)d, %(methodName)s : %(varName)s <%(varType)s> = %(value)s' self.log.info ( outStr % paramDict )
def Init(userDefine = None) : # 모듈 Import 정보를 조사한다. impStepList = extract_stack() if(len(impStepList)==0) : # psyco.full()이 동작하는걸로 본다. import psyco frame = psyco._getemulframe() impStepList = frame.f_code.co_names # __main__ 이 아닌 곳에서 import 되는경우 __LOG__ 사용을 위해 # 임시로 Dummy Log 를 생성한다. if(len(impStepList)!=2) : curModule = __GetParentModule__() if(curModule==None) : sys.modules['__main__'].__dict__["__LOG__"] = CDummyLog() return if(curModule.__name__ != "__main__" and not curModule.__dict__.has_key("__LOG__")) : curModule.__dict__["__LOG__"] = CDummyLog() return # __LOG__ 를 생성한다. global __LOG__ if(userDefine != None) : __LOG__ = userDefine else : __LOG__ = __InitMain__() sys.modules["__main__"].__LOG__ = __LOG__ for subModuleName in sys.modules : subModule = sys.modules[subModuleName] if(type(subModule) == types.NoneType) : continue if(not "Log" in subModule.__dict__) : continue if(subModuleName == "__main__") : continue # 하위 모듈에서 사용 가능하도록 __LOG__ 등록한다. subModule.__LOG__ = __LOG__
def Trace (self, text, level=0): """text의 내용을 간략히 출력하기 위한 Debug 함수""" if(level > self.level) : return paramDict = { } try : stack = extract_stack ( )[-2:][0] paramDict["methodName"] = stack[2] paramDict["lineNumber"] = stack[1] paramDict["fileName"] = os.path.basename(stack[0]) except: import psyco frame = psyco._getemulframe(1) paramDict["methodName"] = frame.f_code.co_name paramDict["lineNumber"] = frame.f_lineno paramDict["fileName"] = os.path.basename(frame.f_code.co_filename) paramDict["text"] = text paramDict["time"] = time.strftime("%Y/%m/%d %H:%M:%S") paramDict["pid"] = self.pid outStr = '[%(time)s] %(pid)s, "%(fileName)s", %(lineNumber)d, %(methodName)s : %(text)s\n' os.write (self.pipe, outStr % paramDict )
def TraceEx (self, text, level=0): """text의 내용을 자세히 출력하기 위한 Debug 함수""" if(level > self.level) : return paramDict = { } try : stack = extract_stack ( )[-2:][0] paramDict["methodName"] = stack[2] paramDict["lineNumber"] = stack[1] paramDict["fileName"] = stack[0] except : import psyco frame = psyco._getemulframe(1) paramDict["methodName"] = frame.f_code.co_name paramDict["lineNumber"] = frame.f_lineno paramDict["fileName"] = frame.f_code.co_filename paramDict["text"] = text paramDict["time"] = time.strftime("%Y/%m/%d %H:%M:%S") paramDict["pid"] = self.pid outStr = '[%(time)s] PID %(pid)s, File "%(fileName)s", line %(lineNumber)d, in %(methodName)s\n %(text)s\n' self.log.info ( outStr % paramDict )