温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python打印日志实例分析

发布时间:2022-07-04 10:09:28 来源:亿速云 阅读:197 作者:iii 栏目:开发技术

这篇“python打印日志实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python打印日志实例分析”文章吧。

    一、必备技能

    1、logging模块的使用

    (1)5个日志等级/以及5个输出日志的内置函数

    (2)日志收集器、日志输出渠道的概念

    (3)如何自定义日志收集器

    (4)如何封装自定义的日志收集器

    二、logging

    python的官方库,打印日志用的,无需安装,使用时直接调用

    1、logging的基本使用

    1.1、日志的五个等级(DEBUG/INFO/WARNING/ERROR/CRITICAL)

    (1)DEBUG:调试模式下的日志,只给程序员看的日志

    (2)INFO:程序正常运行的时候输出的日志

    (3)WARN/WARNING:警告信息,当前程序还可以运行,后面有可能出现问题

    (4)ERROR:程序执行过程总的错误信息

    (5)CRITICAL:发生严重错误,阻塞流程,程序可能无法继续运行

    1.2、打印不同日志等级的方法:

    (1)logging.debug("调试日志信息")

    (2)logging.info("重要日志信息")

    (3)logging.warning("警告日志信息")

    (4)logging.error("错误日志信息")

    (5)logging.critical("致命日志信息")

    1.3、日志收集器和日志输出渠道:

            日志收集器:

                    默认收集器的名字为root,默认收集等级为WARNING,通过如下步骤设置收集器的等级

                    log = logging.getLogger() # 获取日志收集器,默认为root

                    log.setLevel("等级")  # 等级必须大写

                    logging.basicConfig(level=logging.DEBUG)  # 设置收集器的等级

            日志输出渠道:

                    默认输出等级为WARNING

                    输出渠道支持:输出到文件夹和输出到控制台

    Demo实例1——默认WARNING等级

    import logging
    # 打印不同等级的日志(debug、info、warning、error、critical)
    # 如下5条日志,只会打印WARNING等级以后的日志
    logging.debug("这是一条debug级别的日志")
    logging.info("这是一条info级别的日志")
    logging.warning("这是一条warning级别的日志")
    logging.error("这是一条error级别的日志")
    logging.critical("这是一条critical级别的日志")

    运行结果 :(只会打印WARNING级别以上的日志)

    WARNING:root:这是一条warning级别的日志
    ERROR:root:这是一条error级别的日志
    CRITICAL:root:这是一条critical级别的日志

    Demo实例2——默认的日志收集器

    import logging
    # # logging.basicConfig(level=logging.DEBUG) 设置日志级别
    # 未指定name,默认返回自带的默认的root收集器
    # 默认输出WARN级别以上的等级日志
    # 如果设置了WARNING以下的等级,则输出WARNING等级以上的日志
    # 如果设置了WARNING以上的等级,比如设置了ERROR,则输出ERROR等级以上的日志
    log = logging.getLogger()
    # log.setLevel("DEBUG")
    # log.setLevel("INFO")
    # log.setLevel("WARNING")
    log.setLevel("ERROR")
    # log.setLevel("CRITICAL")
     
     
    logging.debug("这是一条debug级别的日志")
    logging.info("这是一条info级别的日志")
    logging.warning("这是一条warning级别的日志")
    logging.error("这是一条error级别的日志")
    logging.critical("这是一条critical级别的日志")

     运行结果:

    ERROR:root:这是一条error级别的日志
    CRITICAL:root:这是一条critical级别的日志

    2、自定义日志收集器

    2.1、创建日志收集器

          log = logging.getLogger(name="rose_logger")

            不传name参数时,默认返回收集器名字为“root”

            传了name参数时,会创建一个新的日志收集器

    2.2、创建日志收集渠道

    (1)输出到控制台:

            pycharm = logging.StreamHandler()

    (2)输出到文件:    

            file = logging.FileHandler(os.getcwd()+r"\rose.log",encoding="utf-8")

            file=handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")

            注意点(参数):

            filename, 日志的文件名称(包含路径)

            when= 'h', 日志的切割单位

            # S - Seconds 秒

            # M - Minutes 分钟

            # H - Hours 小时

            # D - Days 天(24小时)

            # midnight - roll over at midnight 日切

            # W{0-6} - roll over on a certain day; 0 - Monday 周

            interval=1, 滚动周期,与when='h'连动,1-表示以时间为周期

            backupCount=0 保留日志文件的个数,设置为10,永远只保存最近的10个文件

    2.3、创建日志的输出格式 (1)创建日志格式对象

            pycharm_fmt = logging.Formatter(fmt=fmt1)

    (2)将日志输出格式绑定到日志输出渠道

            pycharm.setFormatter(fmt=pycharm_fmt)  ——设置到控制台日志渠道

            file.setFormatter(fmt=pycharm_fmt1)——设置到文件日志渠道

    (3)常用的格式模板(也可以自己定义)

            fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"

            fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'

    (4)格式必须按照指定的格式格式化。常用的如下:

            %(asctime)s——当前时间

            %(funcName)s——模块名

            %(lineno)d——行号

            %(levelname)s——日志等级名称

             %(message)s——具体的日志内容 

       Demo实例3——自定义日志收集器和日志格式

    import logging,os
    from logging import handlers
    # 1、创建日志收集器
    log = logging.getLogger(name="rose_logger")
     
    # 2、创建日志收集渠道
    # 输出控制台
    pycharm = logging.StreamHandler()
    # 输出文件夹
    file = logging.FileHandler(os.getcwd()+r"\rose.log",encoding="utf-8")
    # file = handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")
     
    # 3、创建日志的输出格式
    fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
    # 创建一个日志输出对象
    pycharm_fmt = logging.Formatter(fmt=fmt1)
    fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'
    pycharm_fmt1 = logging.Formatter(fmt=fmt2)
     
    # 4、日志输出格式绑定到日志输出渠道
    pycharm.setFormatter(fmt=pycharm_fmt)
    file.setFormatter(fmt=pycharm_fmt1)
     
    # 5、直接给收集器设置日志级别就可以了,渠道会继承收集器的日志级别
    log.setLevel(level=logging.DEBUG)
    # 5、给收集渠道设置日志级别,文件渠道,控制台输出的级别不会一样
    # pycharm.setLevel(logging.DEBUG)
     
    # 6、将日志收集渠道绑定到日志收集器
    log.addHandler(pycharm)
    log.addHandler(file)
     
    log.info(msg="测试")

    输出结果:

    python打印日志实例分析

    Demo实例4——封装自定义日志收集器

    import logging
    from logging import handlers
    def create_log(name,level,filename,sh_level,fh_level):
        """
        :param name:  日志收集器名字
        :param level: 日志收集器的等级
        :param filename:  日志文件的名称
        :param sh_level:  控制台输出日志的等级
        :param fh_level:    文件输出日志的等级
        :return: 返回创建好的日志收集器
        """
     
        # 1、创建日志收集器
        log = logging.getLogger(name)
     
        # 2、创建日志收集器的等级
        log.setLevel(level=level)
     
        # 3、创建日志收集渠道和等级
        sh = logging.StreamHandler()
        sh.setLevel(level=sh_level)
        log.addHandler(sh)
        fh = logging.FileHandler(filename=filename,encoding="utf-8")
        # fh2 = handlers.TimedRotatingFileHandler(filename=filename,when="D",interval=1,backupCount=10,encoding="utf-8")
        fh.setLevel(level=fh_level)
        log.addHandler(fh)
     
        # 4、设置日志的输出格式
        formats = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
        log_format = logging.Formatter(fmt=formats)
        sh.setFormatter(log_format)
        fh.setFormatter(log_format)
        return log
     
    if __name__ == '__main__':
        log = create_log(name="rose_log",level=logging.DEBUG,filename="test_log.log",sh_level=logging.DEBUG,fh_level=logging.DEBUG)
        log.info(msg="--------debug--------")
        log.info(msg="--------info--------")
        log.info(msg="--------warning--------")
        log.info(msg="--------error--------")
        log.info(msg="--------critical--------")

    输出结果:

    python打印日志实例分析

    以上就是关于“python打印日志实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI