python logging模块学习记录

来源:互联网 发布:java判断是否是素数 编辑:程序博客网 时间:2024/05/15 12:37

最近在逛论坛发现很多小伙伴分享的接口测试框架中都增加了日志模块,想想也对毕竟log是最基本的东西,用于存储每条case的request和response。其中logging模块是用的最多的,老实说这个模块对我来说刚开始还是挺难用的,看的很多遍也算是捋顺了一些,写下来希望能对别人有点作用。ps:我是根据testerhome一篇帖子内容加一下自己的东西的,我会在后面加上该帖子的url,有兴趣的可以去看看。

logging模块主要的用于输出日志,这个模块可以控制日志的输出格式,也可以根据日志的级别将日志打印到控制台和写出文件中。

1.logger=logging.getLogger()用于实例化,其中getLogger()可以传入string类型参数,也就是name来区分不同的logging实例,可以支持继承,我目前还没有用到。

2.实例化的logger可以设置打印的日志等级logger.setLevel(),日志的等级一共分成5种从小到大排序是:debug,info,warning,error和critical。这个可能对于rd用处比较多,因为他们把日志的等级区分很细,我目前在写接口测试中没有写这么多,就是把request和reponse都打印出来,所以就直接使用info。

3.日志的输出格式formatter,说得通俗点就是你的日志里面要打印什么,具体是日志时间,当前程序名称,日志级别和要输出的消息等等,还有一些了,常用也就这个4个,其他我也没见人用过。采用%(<dict key>s)的形式,就是字典关键字替换。%()里面是关键字,后面的‘s’可以控制字节数,比如说可以设置20s,超过20个就不展示,不足20就是用空格代替。

formatter=logging.Formatter('%(asctime)s - %(filename)s :%(levelname)s  %(message)s')

4.handler是用来控制将日志打印到哪里,我用到2个类,一个是logging.StreamHandler()用于将日志输出到控制台,另一个就是RotatingFileHandler()这个一方面可以把日志打印到具体路径的用文本存储下来,还可以通过参数来控制一个文本最大字节数和备份多少个文本,还是特别强大的。

既然有文本的输出肯定有要输出的级别和打印日志的格式就是上面的说得setLevel()和formatter。下面写两个例子:

def set02():

    #实例化name是stream

    logger=logging.getLogger('stream')

    logger.setLevel(logging.INFO)

    #实例化handler,handler用于把日志输出到哪里

    sh=logging.StreamHandler(stream=sys.stdout)

    #设置日志的输出级别

    sh.setLevel(logging.INFO)

    fmt=logging.Formatter('%(levelname)s:%(name)s:%(message)s')

    sh.setFormatter(fmt=fmt)

    logger.addHandler(sh)

    logger.info('info message')

和刚刚写的思路一样的:首先实例化logger,通过setLevel()来控制要输出日志的级别,fmt控制日志的输出格式,addHandler()把设置到好的handler添加进去然后生效。这里面有一个小坑是我写的时候发现的就是实例化logger的时候设置一个setLevel(),在实例化StreamHandle()又有一个setLevel(),这两个地方设置的一样当然没问题如果一个写成了INFO,另一个写成了WARNING的话,我测试了一下是已那个地方设置的level高以那个为准,也就是说无论在logger还是在hanler中设置的了只要设置成了WARNING那么只会打印WARNING级别以上的日志。

def set03():

    logger=logging.getLogger('rotatingfile')

    logger.setLevel(logging.INFO)

    

    rfh=RotatingFileHandler(filename='log.out',

                            maxBytes=20,

                            backupCount=5)

    logger.addHandler(rfh)

    for i in range(20):

        logger.info('i={}'.format(i))

    #glob用于搜索返回匹配的文件路径列表

    logfiles=glob.glob('log.out*')

    for filename in logfiles:

        print filename

同样也是首先实例化logger,并设置setLevel()。实例化RotatingFileHandler(filename,maxBytes,backupCount).filename:要打印的日志的绝对路径。maxBytes:每一个文本存储最大字节数单位B,1KB=1024B,1M=1024KB,比如设置成10M就是maxBytes=10*1024*1024。backupCount:如果超过maxBytes时会自动添加第二个文件,backupCount就是一公存多少个文件。

这里面用还用到了python自带的glob库,这个库可以查找指定文件路径的文件其实就是glob.glob()里面是要查找的局对路径下的要查找文件。用到3个通配符‘*’,‘?’,‘[]’。‘*’代表要匹配0个或者多个字符。‘?’代表匹配一个字符。‘[]’代表要查找的范围比如说[0-5]就是在0到5中间所有的包含0和5.

我用到就是这些,整体我看了好多好久才慢慢理解,在维护接口框架上还是遇到很多坑,在论坛上经常看看别人怎么写的,后面再写一下我用到其他东西,今天没啥事就赶紧把logging写出来,感觉写的还是挺糙的,我在想想怎么写会效果更好一点。

最后附上论坛上文章的地址:https://testerhome.com/topics/8206。有兴趣自己可以多去逛逛


















原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 邮箱发送邮件到上限无法发送怎么办 路由器重置后不知道账号密码怎么办 发出的邮件别人看了撤回不了怎么办 域名和邮箱是不同的公司怎么办 qq音乐听过的歌单找不到了怎么办 快手开直播前置摄像头太暗怎么办 小米手机帐号绑定无法侠用怎么办 用交易猫买完游戏账号被骗了怎么办 一个华为账号有两个游戏账号怎么办 加密u盘电脑上打开空怎么办 国网加密u盘电脑打开为空怎么办 足球竞彩软件下架后里面的钱怎么办 竞彩足球提现不到账怎么办 竞彩足球投注后输了怎么办 英雄联盟鼠标箭头右键点不了怎么办 上古卷轴5数值修改错了怎么办 小时候打针把屁股脂肪打扁了怎么办 大繁盛满腹市场2对话时闪退怎么办 月经来了一个月了还不停怎么办 对办公室的异性老师产生好感怎么办 上古卷轴5任务NPC老打我怎么办 1岁半宝宝走路内八字怎么办 最近几个月例假周期都25天怎么办 从pr导出的视频大小不一样怎么办 合作医疗收据丢了不给报销怎么办 沧州新生医院—老人腹胀了该怎么办 内痔疮术后一个月吃了点辣椒怎么办 肛周脓肿手术后大便干怎么办 月经半个月了还没干净怎么办 房东出租违建房不退房租怎么办 上海公租房住满5年后怎么办 监狱对死缓犯人延长转为无期怎么办 手机号码办理的宽带不想要了怎么办 朋友诈骗罪被关看守所了该怎么办 打架被拘留家里有孩子没人看怎么办 刑事拘留满37天给逮捕了怎么办 因打架被拘留十五天释放后会怎么办 犯罪人在拘留所生了小孩怎么办 我申请了进京证更换车辆怎么办 丈夫去世前想把财产留给妻子怎么办 假货中通代收货款发现是假货怎么办