关键是实现哪行报错,如果关联到失败的文件, 这里主要通过抛出一个异常来实现的,异常捕获后,通过堆栈调用,再处理看看上层调用的行号,从而把行号增加到LOG打印的显示中。
def LogDebug(*args):
"""
*************************************************************
desc: logdebug方法的封装
args: 任意输入字符
return: none
raise: none
remark: none
*************************************************************
"""
# 模拟log里的方法进行递归
try:
raise Exception
except:
objFile = sys.exc_info()[2].tb_frame.f_back # 通过回调函数,获取错误提示中的路径
strFileName = repr(objFile.f_code.co_filename).replace('\\\\', '/').replace('\'',
'') # [3:].replace('\\\\','.').replace('/','.').strip('.').strip('\'')
msg = ''
for msgpart in args:
try:
if type(msgpart) is not str:
msgpart = repr(msgpart)
else:
msgpart = msgpart.decode('utf-8')
except UnicodeDecodeError:
msgpart = msgpart.decode('gbk', 'ignore').encode('utf-8')
msg = msg + msgpart + ' '
msg = '[' + strFileName + ' line:' + str(objFile.f_lineno) + ']:\n[DEBUG]' + msg
objLogger.debug(msg)