Python 中 对 logging 模块进行封装,记录bug日志、日志等级
- 是程序产生的日志
- 程序员自定义设置的
- 收集器和渠道级别那个高就以那个级别输出
- 日志和报告的作用:
- 报告的重点在于执行结果(执行成功失败,多少用例覆盖),返回结果
- 日志的重点在执行过程当中,异常点,哪里失败,哪里报错,诊断代码
logging 模块的基本使用
import logging # Python内置的日志模块 # 1. 定义日志收集器,使用.getLogger(译:老哥儿)方法,收集器的名字case case_logger = logging.getLogger("case") # 会创建一个 Logger 对象 # 2. 指定日志收集器的日志等级,使用 logging 对象中.setLevel (译:赛特。莱欧)方法 # NOTSET(0), DEBUG(10), INFO(20)--, WARNING(30), ERROR(40), CRITICAL(50) # 方法一 setLevel(赛特。莱欧) # case_logger.setLevel(logging.DEBUG) # 只能收集当前等级和当前等级以上级别的日志 # 方法二 setLevel(赛特。莱欧) case_logger.setLevel("DEBUG") # 3. 定义日志输出渠道 # 输出到控制台,使用 logging(老根)当中的.StreamHandler(丝锥木汗都) console_handle = logging.StreamHandler() # Handler对象 # 输出到文件,使用 logging(老根)当中的.FileHandler(发偶。憨豆)方法,(指定文件名, 默认a以追加的方式,) file_handle = logging.FileHandler("cases.log", encoding="utf-8") # 4. 指定日志输出渠道的日志等级,使用对象.setLevel(赛特。莱欧)方法 console_handle.setLevel(logging.ERROR) file_handle.setLevel(logging.INFO) # 5. 定义日志显示的格式,logging(老根)当中的 Formatter(佛梅特) 函数 # 简单点的格式 simple_formatter = logging.Formatter('%(asctime)s - [%(levelname)s] - [msg]: %(message)s') # 详细的格式 verbose_formatter = logging.Formatter('%(asctime)s - [%(levelname)s] - [msg]: %(message)s - %(name)s - %(lineno)d') # 控制台显示简洁的日志,setFormatter(赛特否梅特)函数 console_handle.setFormatter(simple_formatter) # 日志文件中显示详细日志 file_handle.setFormatter(verbose_formatter) # 6. 对接, 将日志收集器与输出渠道对接,收集器中 addHandler(按得,憨豆)函数 case_logger.addHandler(console_handle) case_logger.addHandler(file_handle)
日志等级
- NOTSET(0):(译:闹特赛特):相当没级别
- DEBUG(10):(译:滴bug):在调试阶段,业务系统还没有上线,仅仅是用来调试
- INFO(20):(译:in否):正常的提示信息,普通的提示信息,比如返回的状态吗
- WARNING(30):(译:外流):警告,没有错,不会导致系统中断,程序正常进行,会出现某个警告;某一个模块回不可用
- ERROR(40):(译:哎歪):系统出现错误,影响系统功能
- CRITICAL(50):(译:快特扣):最严重的的错误,会导致程序中断
日志显示的格式
- %(asctime)s :显示时间
- %(created)f:创建日期
- %(filename)s : 日志的名称
- %(funcName)s : 函数的名称
- %(levelname)s : 日志等级
- %(levelno)s:日志级别
- %(lineno)d : 报错行号
- %(message)s : 具体的日志详情信息
- %(module)s : 那个模块的报错
- %(name)s : 收集器的名字
logging 模块的封装
# 封装处理日志的类 import logging from danyuan.handle_config import do_config # 从配置文件中获取 class HandleLog: """ 封装处理日志的类 """ def __init__(self): # 1. 定义日志收集器 self.case_logger = logging.getLogger(do_config.get_value("log", "logger_name")) # 2. 指定日志收集器的日志等级 self.case_logger.setLevel(do_config.get_value("log", "logger_level")) # 3. 定义日志输出渠道 console_handle = logging.StreamHandler() # 定义日志输出到控制台 file_handle = logging.FileHandler(do_config.get_value("log", "log_filename"), encoding="utf-8") # 定义日志输出到文件 # 4. 指定日志输出渠道的日志等级 console_handle.setLevel(do_config.get_value("log", "console_level")) file_handle.setLevel(do_config.get_value("log", "file_level")) # 5. 定义日志显示的格式 simple_formatter = logging.Formatter(do_config.get_value("log", "simple_formatter")) # 简单点的格式 verbose_formatter = logging.Formatter(do_config.get_value("log", "verbose_formatter")) # 详细的格式 console_handle.setFormatter(simple_formatter) # 控制台显示简洁的日志 file_handle.setFormatter(verbose_formatter) # 日志文件中显示详细日志 # 6. 对接, 将日志收集器与输出渠道对接 self.case_logger.addHandler(console_handle) self.case_logger.addHandler(file_handle) def get_logger(self): """ 获取logger日志对象 :return: """ return self.case_logger # do_log = HandleLog().get_logger() # 实例化对象 if __name__ == '__main__': do_log = HandleLog() case_logger = do_log.get_logger() case_logger.debug("这是一个debug级别的日志") # 手动记录日志 case_logger.info("这是一个info级别的日志") case_logger.warning("这是一个warning级别的日志") case_logger.error("这是一个error级别的日志") case_logger.critical("这是一个critical级别的日志")
补充:
1、根据日志文件的大小和个数,来自动生成和清理日志文件
2、根据时间来生成日志文件
import time import logging from logging import handlers # ========1、 创建一个日志收集器 logger = logging.getLogger("py43") # 指定日志级别 logger.setLevel(logging.INFO) # ========2、 创建一个文件输出渠道 # 实例化一个文件渠道类, [如果日志当中有中文,要指定编码格式为utf-8] # handle2 = logging.FileHandler("my_first_log.log", encoding="utf-8") # 根据日志文件的大小和个数,来自动生成和清理日志文件。1024 = 1KB # handle2 = handlers.RotatingFileHandler("my_log_by_filesize.log", encoding="utf-8",maxBytes=1024,backupCount=10) # 根据时间来生成日志文件。when代表时间单位,interval代表周期。比如when=h, interval=2,表示2小时生成一个日志文件。 handle2 = handlers.TimedRotatingFileHandler("my_log_by_when.log", encoding="utf-8",when="s",backupCount=10) # ===========3、设计日志的格式 fmt = '%(asctime)s %(levelname)s %(filename)s 【行号:%(lineno)d】:%(message)s' formatter = logging.Formatter(fmt) # ============4、设置输出渠道的,日志格式 handle2.setFormatter(formatter) # ========5、将输出渠道,绑定到日志收集器上 ============ logger.addHandler(handle2) for _ in range(100): time.sleep(0.1) logger.info("111111111111111111111111111111111111111111111111111111111111111111")
本文仅供参考;如果这篇文件对你有所帮助,麻烦动动发财的小手,推荐一波支持下万分感谢
*******请大家尊重原创,如要转载,请注明出处:作者:守护@往昔;转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******