• 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
    出处:https://www.cnblogs.com/hn-daxiong/
    欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。
  • 相关阅读:
    数据库基本设计
    servlet 高级知识之Listener
    servlet 高级知识之Filter
    servlet-生命周期
    http协议概述
    javase高级技术
    javase高级技术
    IO之4种字节流拷贝文件方式对比
    Map 概述
    图解 数组,链表,2种数据结构
  • 原文地址:https://www.cnblogs.com/hn-daxiong/p/12543843.html
Copyright © 2020-2023  润新知