前言
想要在日志文件中打印详细的异常信息,直接使用sys.exc_info输出的信息不能满足需要。
一、打印的日志内容不能满足需要?
参照HtmlTestRunner报告中的错误内容,期望的异常日志:
然而很无力的发现,自己的日志:
日志打印代码如下
class LoginTest(UnittestBase):
def user_login_verify(self, username="", password=""):
logger.debug("Start %s", "user_login_verify")
try:
LoginPage(self.driver).user_login(username, password)
except NoSuchElementException:
logger.error(sys.exc_info()[:3])
看了下sys.exc_info,返回type, value, traceback三个值,基本与我输入的日志一致,但这也太单簿无力了,没有错误文件名称,没有错误代码模块,更没有错误行数叫我怎么定位问题?
又跑去看HtmlTestRunner,看人家是怎么处理的,搞半天没整明白,只知道也是用的sys中的exc_info,stdout,stderr方法,经过了一定的转换,代码太多实在不想看了。
无意间看了下log.error,真相了
二、解决办法
log.error源码如下:
def error(self, msg, *args, **kwargs):
"""
#Log 'msg % args' with severity 'ERROR'.
#To pass exception information, use the keyword argument exc_info with
#a true value, e.g.
#logger.error("Houston, we have a %s", "major problem", exc_info=1)
"""
if self.isEnabledFor(ERROR):
self._log(ERROR, msg, args, **kwargs)
自己的代码修改一下:
class LoginTest(UnittestBase):
def user_login_verify(self, username="", password=""):
logger.debug("Start %s", "user_login_verify")
try:
LoginPage(self.driver).user_login(username, password)
except NoSuchElementException:
# logger.error(sys.exc_info()[:3])
logger.error("Catch %s Exceptions ", "Web element", exc_info = 1)
finally:
logger.debug("Complete %s", "user_login_verify")
修改后的日志如下,是不是很简单
总结
所以说,有事没事看下源码,解决办法都在里面。