python---logging模块使用

前言

        在运行自动化脚本过程中,我们常常需要监控测试用例的执行过程或者测试用例的结果。之前我们往往会将代码的运行结果通过print输出到控制台显示,控制台显示信息的最大弊端就是不能保存结果。所有当需要将结果显示时我们常常会使用logging日志的方式,相对与print的方式,日志具有以下好处

         1.能将信息分类,可以去设置输出数据的等级,这样可以不用显示大量的调试信息

         2.print只能将信息显示在控制台,而日志可以将信息显示在控制台以及指定的log文件中。(甚至能显示在多个文件中)

         3.能设置输入信息的格式。print只能仅仅的将内容打印出来,而日志我们可以设置时间,内容等等格式

1 logging模块简介

​ logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;

 

2 logging模块使用

2.1 基本使用

首先安装logging第三方模块

pip  logging

配置logging基本的设置,然后在控制台输出日志

import logging  
logging.debug('debug message')  
logging.info('info message')  
logging.warning('warning message')  
logging.error('error message')  
logging.critical('critical message')  

WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message

​ 可见,默认情况下python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志, 这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET),

默认的日志格式为:      日志级别:Logger名称:用户输出消息

 

2.2灵活配置日志级别,日志格式,输出位置

import logging  


logging.basicConfig(level
=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='/tmp/test.log', filemode='w') logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message')

 

可见在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有


- filename:   用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。  
- 
- filemode:   文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。  
- format:     指定handler使用的日志显示格式。  
- 
- datefmt:    指定日期时间格式。  
- level:       设置日志级别 
                  

2.3 handlers的使用

         handler决定了你的日志最终出现的位置, 你的log信息是直接输出到终端(StreamHandler) 还是 保存到 log文件(FileHandler)

      典型的日志记录的步骤是这样的:

  1. 创建logger
  2. 创建handler(streamhandler与fileHandler)
  3. 定义formatter
  4. 给handler添加formatter
  5. 给logger添加handler
import logging
logger = logging.getLogger()
logger.setLevel(level = logging.INFO)

#建立一个FileHandler handler
= logging.FileHandler("log.txt",encoding='utf8') handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter)
#建立一个streamHandler console
= logging.StreamHandler() console.setLevel(logging.INFO) logger.addHandler(handler) logger.addHandler(console) logger.info("Start print log") logger.debug("Do something") logger.warning("Something maybe fail.") logger.info("Finish")

 

 

附录:日志封装文件

 #封装日志
    def get_log(self):
        # 创建一个logger
        logger = logging.getLogger()
        logger.setLevel(logging.INFO)

        # 设置日志存放路径,日志文件名
        # 获取本地时间,转换为设置的格式
        rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
       # 通日志存放路
        all_log_path = 'Logs/All_Logs/'
        error_log_path ='Logs/Error_Logs/'# 设置日志文件名
        all_log_name = all_log_path + rq + '.log'
        error_log_name = error_log_path + rq + '.log'

        # 创建handler
        # 创建一个handler写入所有日志
        fh = logging.FileHandler(all_log_name, encoding='utf8')
        fh.setLevel(logging.INFO)
        # 创建一个handler写入错误日志
        eh = logging.FileHandler(error_log_name, encoding="utf8")
        eh.setLevel(logging.ERROR)
        # 创建一个handler输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.INFO)

        # 定义日志输出格式
        # 以时间-日志器名称-日志级别-日志内容的形式展示
        all_log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        # 以时间-日志器名称-日志级别-文件名-函数行号-错误内容
        error_log_formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(module)s  - %(lineno)s - %(message)s')
        # 将定义好的输出形式添加到handler
        fh.setFormatter(all_log_formatter)
        ch.setFormatter(all_log_formatter)
        eh.setFormatter(error_log_formatter)

        # 给logger添加handler
        logger.addHandler(fh)
        logger.addHandler(eh)
        logger.addHandler(ch)
        return logger

 

posted @ 2020-03-22 02:03  hn_大熊  阅读(898)  评论(0编辑  收藏  举报