Esempio n. 1
0
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
Esempio n. 2
0
	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 )
Esempio n. 3
0
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__
Esempio n. 4
0
	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 )
Esempio n. 5
0
	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 )