当前位置 : 主页 > 编程语言 > python >

python的logging模块

来源:互联网 收集:自由互联 发布时间:2022-07-05
一. logging是什么,作用是什么 logging—是python自带的一个日志模块 它的作用主要有两个: 1. 代替print,可以把大部分你想要进行调试的信息打印出来或者是输出到指定文件 2. 可以对一些

一. logging是什么,作用是什么

logging—是python自带的一个日志模块

 

它的作用主要有两个:

1. 代替print,可以把大部分你想要进行调试的信息打印出来或者是输出到指定文件

2. 可以对一些输出的调试信息分类做输出,比如说:

DEBUG, INFO, WARNING, ERROR, CRITICAL

二. logging模块的介绍与使用

python使用logging模块记录日志涉及四个主要类,每个类的用法功能如下:

  • logger:提供了应用程序可以直接使用的接口
  • handler:将(logger创建的)日志记录发送到合适目的的输出
  • setLevel:提供了细度设备来决定输出哪种级别的日志记录
  • formatter:决定日志记录的最终输出形式

三. logging内容

logging模块--主要为以下三个方面:

  • 日志级别
  • 日志内容格式
  • 日志输出方式
  • 1. 日志级别

    critical > error > warning > info > debug

    级别越高打印的日志越少,反之亦然,即

    • debug:打印全部的日志
    • info:打印info,warning,error,critical级别的日志
    • warning:打印warning,error,critical界别的日志
    • error:打印error,critical级别的日志
    • critical:打印critical级别的日志

    2. logger的介绍

    logger是后续程序可以直接调用的接口,如果不去创建一个logger的话,那么就会默认调用root-logger(logging),因为logger在日志系统里面是有父级与子级的,如果没有创建一个新的logger子级,那么打印日志的时候就会直接调用到父级

    常用方法:getLogger

    python的logging模块_日志记录

    我们来看个简单的例子:

    import logging

    logger = logging.getLogger("autotest")
    #没有输出info级别的日志,默认logging是WARNING级别的
    logger.info("我是INFO类型的日志")
    logger.warning("我是警告类型的日志")
    logger.error("我是错误类型的日志输出")

    结果是这样的:

    python的logging模块_日志文件_02

    3. setLevel的介绍

    我们一般用setLevel来设置日志的输出级别

    1) logging有如下级别:DEBUG、INFO、WARNING、ERROR、CRITICAL--->级别正序越来越高。默认级别是WARNING

    2) logging模块只会输出指定level以上的log

    3) 用法logger.debug()、logger.info()、logger.warning()、logger.error()、logger.critical():用于日志输出,相当于print的作用

    这样的好处,就是在项目开发时debug用到的log,我们想要什么级别的日志,不需要去改代码,只需要在这个级别设置里改变日志的输出级别就可以了

    4. handler的介绍

    StreamHandler:

    日志信息会输出到指定的stream中,如果stream为空则默认输出到sys.stdeer,即控制台

    FileHandler:

    继承自StreamHandler,将日志信息输出到磁盘文件上,默认情况下,日志文件可以无限增大

     

    logging模块中的handlers模块专门用来处理日志输出的,位于logging.handlers

    常用handlers:

    RotatingFileHandler:支持循环日志文件

    maxBytes:允许日志文件在达到maxBytes时rollover。当文件大小达到或者超过maxBytes时,就会新创建一个日志文件

    backupCount:备份数目,也就是最多能有多少个备份。命名会在日志的base_name后面加上.0-.n的后缀(比如:test.0.log、test.1.log...)

     

    TimedRotatingFileHandler:在RotatingFileHandler的基础上,支持定时生成新的日志文件。when:时间间隔的类型

    5. Formatter的介绍

    logging.Formatter:用来设置在控制台或者在文件中,日志内容的呈现方式:

    在创建Formatter对象的时候有如下两个参数:

    fmt:日志中具体输出哪些内容,日志生成的时间,所在文件,所在代码行等

    datefmt:时间的格式。默认格式为:%Y-%m-%d %H:%M:%S

    注:在Formatter类中有说明fmt可以选用的选项

    6. 实例

    import logging
    from logging.handlers import RotatingFileHandler

    #第一步:创建一个日志收集器logger
    logger = logging.getLogger("autotest")

    #第二步:修改日志输出级别
    logger.setLevel(logging.INFO)

    #第三步:设置输出的日志内容格式
    fmt = '%(asctime)s %(filename)s %(funcName)s [line:%(lineno)d] %(levelname)s %(message)s'
    datefmt = '%a, %d %b %Y %H:%M:%S'
    fm = logging.Formatter(fmt, datefmt)

    #第四步:设置输出渠道--输出到文件handler
    hd_1 = RotatingFileHandler("autotest.log", maxBytes=1024*1024*2, backupCount=10, encoding="utf-8")
    #在handler上指定日志内容格式
    hd_1.setFormatter(fm)

    #设置输出渠道--输出到控制台
    hd_2 = logging.StreamHandler()
    #在handler上指定日志内容格式
    hd_2.setFormatter(fm)

    #第五步:将headler添加到日志logger上
    logger.addHandler(hd_1)
    logger.addHandler(hd_2)

    #第六步:调用输出方法
    logger.info("hahahahahhahahah---")
    logger.warning("我是警告类型的日志")
    logger.error("我是错误类型的日志输出")
    logger.info("hehehehhehe")

    文件输出结果:

    python的logging模块_日志输出_03

    控制台输出结果:

    python的logging模块_日志输出_04 

    7. 总结

    python的logging模块_日志输出_05

    8. 补充:配置root logger

    import logging
    import time, os
    from logging.handlers import RotatingFileHandler


    #设置输出的日志内容格式
    fmt = '%(asctime)s %(filename)s %(funcName)s [line:%(lineno)d] %(levelname)s %(message)s'
    datefmt = '%a, %d %b %Y %H:%M:%S'

    #设置当前时间
    curTime = time.strftime("%Y-%m-%d %H%M", time.localtime())

    #设置输出渠道--输出到控制台
    hd_1= logging.StreamHandler()

    #设置输出渠道--输出到文件
    hd_2 = RotatingFileHandle(os.getcwd() +"/Api_Autotest_log_{0}.log".format(curTime), backupCount=20, encoding='utf-8')

    #设置root logger,由于basicConfig()的参数是**kwargs,所以参数要以key=value的形式传入
    logging.basicConfig(format=fmt, datefmt=datefmt, level=logging.INFO, handlers=[hd_1, hd_2])

    #调用输出方法
    logging.info("hehehe")

     


    上一篇:python中的字符串
    下一篇:没有了
    网友评论