一、日志集成,为什么要写日志?

在公司开发的任何一个系统都会有日志设计,通过日志,把系统的行为记录并保存起来,一旦系统发生了一些问题便可以通过日志去分析问题发生在哪里,是因为什么原因发生的。同样,我们在设计测试框架的时候,也可以通过设计日志来记录框架的整个测试流程,一旦执行过程中出现异常,我们也能通过日志中记录的错误信息找到问题发生的症结。Python的logging模块,有关logging我们需要了解如下一些信息:

  • 日志分为5个级别,分别是:DEBUG、INFO、WARNING、ERROR、CRITICAL,日志严重级别从左往右逐渐增加,一般在Python写日志系统时,我们对于普通的信息输出会订为INFO级别,对于异常信息,定位ERROR级别。
  • 日志输出渠道有两个handler:console(控制台)和file(指定文件)
  • 日子输出可以指定格式:formatter
  • 日志输出完毕后,要移除handler,否则会导致日志输出重复

二、编写属于自己的日志系统My_Log
直接示范代码如下所示:

import logging
import time


class MyLog:

    def my_log(self, msg, level):

        # 1:设置日志生成器的名字,eg:test_api_log
        logger = logging.getLogger("test_api_log")

        # 2:设置输出什么级别的日志
        logger.setLevel('DEBUG')

        # 3:设置格式:创建日志格式对象,决定我们日志输出格式
        formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息:%(message)s')

        # 4:日志输出器 控制台 指定的文件
        ch = logging.StreamHandler()  # 渠道是指输出到控制台
        ch.setLevel('DEBUG')  # 只输出INFO以上的
        ch.setFormatter(formatter)

        # 5:日志文件名称按日期生成
        now = time.strftime('%Y-%m-%d')  # 获取当天的时间,时间生成格式为eg:2021-10-31
        # now = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))  # 获取当天的时间,时间生成格式为eg:202110311251

        path = "test_api_" + now + ".log"  # 拼接路径

        # 6:设置日志最终存放的地方
        fh = logging.FileHandler(path, encoding='UTF-8')
        fh.setLevel('DEBUG')
        fh.setFormatter(formatter)  # FileHandler对象自定义日志格式

        # 7:对接
        logger.addHandler(ch)  # logger日志对象加载StreamHandler对象
        logger.addHandler(fh)  # logger日志对象加载FileHandler对象

        if level == 'DEBUG':
            logger.debug(msg)
        elif level == 'INFO':
            logger.info(msg)
        elif level == 'WARNING':
            logger.warning(msg)
        elif level == 'ERROR':
            logger.error(msg)
        elif level == 'CRITICAL':
            logger.critical(msg)

        # 关闭渠道,作用:解决重复记录日志,eg:第一条记录写一次,第二条记录写两次,第三条记录写三次
        logger.removeHandler(ch)
        logger.removeHandler(fh)

    def debug(self, msg):
        self.my_log(msg, 'DEBUG')  # 调用my_log函数

    def info(self, msg):
        self.my_log(msg, 'INFO')

    def warning(self, msg):
        self.my_log(msg, 'WARNING')

    def error(self, msg):
        self.my_log(msg, 'ERROR')

    def critical(self, msg):
        self.my_log(msg, 'CRITICAL')
if __name__ == '__main__':
    my_logger = MyLog()
    my_logger.info("test1")
    my_logger.info("test2")
    my_logger.info("test33")

三、执行测试,首先在控制台查看日志记录

collectd python 日志 python日志系统_python


生成的日志文件名称

collectd python 日志 python日志系统_日志文件_02


然后是日志文件内容

collectd python 日志 python日志系统_collectd python 日志_03

注:日志虽然说越详细越好,但是对于一些无关紧要的操作,我们其实是没必要做日志的,日志太多反而不好定位错误信息,因此一般做日志记录的都是一些比较核心,重要的操作,或者容易出问题的哪些操作,

collectd python 日志 python日志系统_日志记录_04


注:仅供参考,有疑问或没疑问都可私信博主哦,共同学习,一起进步,奥利给!!!