查看原文
其他

[接口测试 - 基础篇] 12 还是要掌握python日志管理模块的

苦叶子 开源优测 2022-11-13

点击上方蓝字“开源优测”一起玩耍

python logging模块介绍

        Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。

        logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter。

  • logger
    提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

  • handler
    将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

  • filter
    提供一种优雅的方式决定一个日志记录是否发送到handler。

  • formatter
    指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

与log4j类似,logger,handler和日志消息的调用可以有具体的日志级别(Level),只有在日志消息的级别大于logger和handler的级别。

封装一个自己的日志类

        下面我们把其复杂的功能进行简化封装,只使用最基本的的功能,来自定义成我们自己的日志管理类,并演示如何使用。

#-*- coding:utf-8 -*-

__author__ = "苦叶子"

import logging LOGGING_FORMAT = '%(asctime)s %(filename)s[line:%(lineno)d] \
   %(levelname)s %(message)s'



class LYMLogging:
   def __init__(self,        level=logging.DEBUG, # 日志级别        format=LOGGING_FORMAT, # 日志格式        datefmt='%a, %d %b %Y %H:%M:%S', # 日期格式        filename='LYM.log', # 日志文件名        filemode='w' # 文件打开模式        ):        self.level = level        self.format = format        self.datefmt = datefmt        self.filename = filename        self.filemode = filemode        

       # 初始化日志同时输出到console和日志文件
       logging.basicConfig(level=self.level,            format=self.format,            datefmt=self.datefmt,            filename=self.filename,            filemode=self.filemode)            # 定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,
       # 并将其添加到当前的日志处理对象
       console = logging.StreamHandler()        console.setLevel(logging.INFO)        formatter = logging.Formatter('%(name)-12s: %(levelname)-8s \
           %(message)s'
)        console.setFormatter(formatter)        logging.getLogger('LYMLogger').addHandler(console)        self.log = logging.getLogger("LYMLogger")    
       # 日志输出    def output(self, msg, level=logging.DEBUG):        if level == logging.DEBUG:            
           # 调试信息
           self.log.debug(msg)                elif level == logging.INFO:                        # 一般的信息            self.log.info(msg)        
       elif
level == logging.WARNING:                        # 警告信息            self.log.warning(msg)                elif level == logging.ERROR:            
           # 错误信息
           self.log.error(msg)        
        else:            
           # 尼玛
           self.log.critical(msg)                                def set_level(self, level=logging.DEBUG):        self.log.set_level(level)  
          if __name__ == "__main__":    print("python logging实例")    log = LYMLogging()    log.output("it's debug msg", level=logging.DEBUG)    log.output("it's info msg", level=logging.INFO)    log.output("it's warning msg", level=logging.WARNING)    log.output("it's error msg", level=logging.ERROR)    log.output("it's fuck msg", level=logging.CRITICAL)

结果输出

在控制台输出一下内容

python logging实例
LYMLogger : INFO it's info msg
LYMLogger : WARNING it's warning msg
LYMLogger : ERROR it's error msg
LYMLogger : CRITICAL it's fuck msg

在LYM.log日志文件中写入了以下内容:

Wed, 23 Aug 2017 10:04:05 logging_demo.py[line:43] DEBUG it's debug msg
Wed, 23 Aug 2017 10:04:05 logging_demo.py[line:46] INFO it's info msg
Wed, 23 Aug 2017 10:04:05 logging_demo.py[line:49] WARNING it's warning msg
Wed, 23 Aug 2017 10:04:05 logging_demo.py[line:52] ERROR it's error msg
Wed, 23 Aug 2017 10:04:05 logging_demo.py[line:55] CRITICAL it's fuck msg

请思考为什么控制台和日志文件的内容有区别?

小结

这里只是对日志模块logging进行了简单的分享,对于其更强大的功能请自行去学习和实践。例如:

  • 用配置文件来控制日志输出

  • 实现日志回滚


开源优测

分享软件测试开源技术、经验、方案的首发平台

长按二维码/微信扫描 关注开源优测

QQ群:260407012

苦叶子私人微信:liyimin1912

有问题,可留言或加好友进微信群

苦叶子原创文章首发平台


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存