怎么在日志文件中输出sys.exc_info样式的错误信息


前言

想要在日志文件中打印详细的异常信息,直接使用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")

修改后的日志如下,是不是很简单
在这里插入图片描述


总结

所以说,有事没事看下源码,解决办法都在里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值