文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python打印日志实例分析

2023-07-02 13:00

关注

这篇“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、创建日志收集渠道

(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,osfrom 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 loggingfrom logging import handlersdef 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打印日志实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯