pytest笔记(8)——日志

本文详细介绍了如何在pytest框架中使用和配置日志,包括基本的日志设置、公共日志模块的创建、通过配置文件实现日志的通用化管理。通过示例展示了如何将日志输出到控制台和文件,并提供了日志配置文件的实例,展示了不同级别的日志记录。此外,还总结了日志模块的基本语法和调用方法。
摘要由CSDN通过智能技术生成

pytest笔记(8)——日志

pytest框架——日志:
导入库:import logging
指定日志级别:
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',#时间、文件名、行、级别名称、级别方法后的信息
                        datefmt='[%Y-%m_%d %H:%M:%S]', #日记格式,年月日时分秒
                        filename='./my.log',      #输出日志文件名
                        filemode='a')       #读写方式
输出日志到控制台:
        import logging
        初始化Logger对象
        logger = logging.getLogger(__name__)
        logger.setLevel(level = logging.DEBUG)
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        #初始化控制台对象
        console = logging.StreamHandler()
        console.setFormatter(formatter)
        #把控制台对象添加到日志Handler中
        logger.addHandler(console)
        module_logger = logging.getLogger('commlog.sub')
        #输出日志信息在控制台
        module_logger.info("Start print log")
        module_logger.debug("Do something")
        module_logger.warning("Something maybe fail.")
        module_logger.info("Finish")

公共日志模块:用的时候直接调用就可以
    #公共日志模块设置
    #**********************************
    import logging
    #初始化日志对象
    logger = logging.getLogger('commlog')  #这里的名称是自定义的
    logger.setLevel(level=logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    #初始化日志文件对象
    handler = logging.FileHandler('log1.txt')
    handler.setLevel(logging.INFO)
    handler.setFormatter(formatter)

    #初始化控制台对象
    console = logging.StreamHandler()
    console.setLevel(logging.DEBUG)
    console.setFormatter(formatter)

    #添加日志文件和控制台对象
    logger.addHandler(handler)
    logger.addHandler(console)
引用:
    from test_log import comm_log  #test_log是这个文件所在的位置,comm_log是公共模块的文件名称
    import logging

    module_logger = logging.getLogger('commlog.sub')   #commlog.sub中commlog是自定义的名称
    module_logger.info('this is another module using logging')
    module_logger.warning('另一个模块打印的警告')

配置文件实现公用化的日志:log.conf
        ###############################################
        [loggers]  #log日志的初始化
        keys=root  #key名称
        [logger_root]
        level=DEBUG  #级别
        handlers=hand01 #需要输出控制台设置这个
        ###############################################
        [handlers]   #输出控制台
        keys=hand01
        [handler_hand01]
        class=StreamHandler
        level=WARNING
        formatter=form01
        args=(sys.stderr,)   #
        ###############################################
        [formatters]
        keys=form01,form02
        [formatter_form01]
        format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
        datefmt=%a, %d %b %Y %H:%M:%S
        [formatter_form02]
        format=%(name)-12s: %(levelname)-8s %(message)s
        datefmt=%a, %d %b %Y %H:%M:%S

配置文件的调用:
import logging
import logging.config

logging.config.fileConfig('配置文件名称')  #加载配置文件
loggers = logging.getLogger('root')   #配置文件中初始化配置的key名称

loggers.debug('这是debug日志')

既可以输出到控制台也可以输出到日志:log.conf
        [loggers]
        keys=root,main

        [handlers]
        keys=consoleHandler,fileHandler

        [formatters]
        keys=fmt

        [logger_root]
        level=DEBUG
        handlers=consoleHandler

        [logger_main]
        level=DEBUG
        qualname=main
        handlers=fileHandler

        [handler_consoleHandler]
        class=StreamHandler
        level=DEBUG
        formatter=fmt
        args=(sys.stdout,)

        [handler_fileHandler]
        class=logging.handlers.RotatingFileHandler
        level=DEBUG
        formatter=fmt
        args=('test.log','a',20000,5,)

        [formatter_fmt]
        format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

调用:
        import logging
        import logging.config

        logging.config.fileConfig('配置文件名称')  #加载配置文件
        loggers = logging.getLogger('root')   #配置文件中初始化配置的key名称初始化控制台
        loggers_file = logging.getLogger('main')  #初始化文件  main取自log.conf配置中的key

=========================================日志模块小结==================================================

一、基本语法
    初始化

    基本配置:
        导入库:import logging
        指定日志级别:
            logging.basicConfig(level=logging.INFO,
                                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',#时间、文件名、行、级别名称、级别方法后的信息
                                datefmt='[%Y-%m_%d %H:%M:%S]', #日记格式,年月日时分秒
                                filename='./my.log',      #输出日志文件名
                                filemode='a')       #读写方式

二、日志设置
    脚本内嵌

    公共模块日志文件
        公共日志模块:用的时候直接调用就可以
            #公共日志模块设置
            #**********************************
            import logging
            #初始化日志对象
            logger = logging.getLogger('commlog')  #这里的名称是自定义的
            logger.setLevel(level=logging.DEBUG)
            formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

            #初始化日志文件对象
            handler = logging.FileHandler('log1.txt')
            handler.setLevel(logging.INFO)
            handler.setFormatter(formatter)

            #初始化控制台对象
            console = logging.StreamHandler()
            console.setLevel(logging.DEBUG)
            console.setFormatter(formatter)

            #添加日志文件和控制台对象
            logger.addHandler(handler)
            logger.addHandler(console)
        引用:
            from test_log import comm_log  #test_log是这个文件所在的位置,comm_log是公共模块的文件名称
            import logging

            module_logger = logging.getLogger('commlog.sub')   #commlog.sub中commlog是自定义的名称
            module_logger.info('this is another module using logging')
            module_logger.warning('另一个模块打印的警告')

    公共配置日志文件
        既可以输出到控制台也可以输出到日志:log.conf
                [loggers]
                keys=root,main

                [handlers]
                keys=consoleHandler,fileHandler

                [formatters]
                keys=fmt

                [logger_root]
                level=DEBUG
                handlers=consoleHandler

                [logger_main]
                level=DEBUG
                qualname=main
                handlers=fileHandler

                [handler_consoleHandler]
                class=StreamHandler
                level=DEBUG
                formatter=fmt
                args=(sys.stdout,)

                [handler_fileHandler]
                class=logging.handlers.RotatingFileHandler
                level=DEBUG
                formatter=fmt
                args=('test.log','a',20000,5,)

                [formatter_fmt]
                format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

        调用:
                import logging
                import logging.config

                logging.config.fileConfig('配置文件名称')  #加载配置文件
                loggers = logging.getLogger('root')   #配置文件中初始化配置的key名称初始化控制台
                loggers_file = logging.getLogger('main')  #初始化文件  main取自log.conf配置中的key

三、调用方法
    当前脚本包含日志对象及及方法
    调用公共文件
    调用公共配置


四、结合框架
==================================================结束====================================================
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pytest中,可以使用`-r`选项来输出测试结果的详细信息,包括测试结果、测试耗时、测试文件名等。你可以将这些信息重定向到一个日志文件中,并使用`-s`选项在终端上输出运行日志。 如果你想控制日志文件的大小,可以考虑使用Python内置的`RotatingFileHandler`类,该类可以在日志文件达到指定大小时自动滚动日志,以避免日志文件过大。 以下是一个示例代码,可以在Pytest中使用`RotatingFileHandler`类来控制日志文件大小: ```python import logging import pytest from logging.handlers import RotatingFileHandler # 定义日志文件名和路径 log_file = "test.log" log_path = "./logs" # 创建RotatingFileHandler对象,设置日志文件大小为10MB,保留最近3个日志文件 handler = RotatingFileHandler(filename=log_file, mode='a', maxBytes=10*1024*1024, backupCount=3) # 设置日志级别为INFO handler.setLevel(logging.INFO) # 定义日志格式 formatter = logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s') handler.setFormatter(formatter) # 添handler到root logger中 logging.getLogger('').addHandler(handler) def test_example(): logging.info("Running test example...") # 测试代码 assert 1 == 1 if __name__ == "__main__": # 运行pytest,并将日志输出到控制台和日志文件中 pytest.main(["-s", "-rA", "--log-file={}/{}".format(log_path, log_file)]) ``` 在这个示例中,我们创建了一个`RotatingFileHandler`对象,并将其添到root logger中。然后,我们定义了一个测试函数`test_example()`,在其中使用`logging`模块写入日志信息。最后,我们使用Pytest运行测试,并将日志输出到控制台和日志文件中。你可以在`RotatingFileHandler`构造函数中根据需要调整`maxBytes`和`backupCount`参数来控制日志文件大小和保留的日志文件数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值