• 『无为则无心』Python日志 — 66、将日志信息保存到文件中


    1、把日志信息保存到文件中

    代码如下所示:

    python
    """
    logging模块是Python的内置模块,不需要安装。
    
    步骤:
    1,创建一个把日志信息保存到文件中的处理器FileHandler
    2,把文件处理器添加到logger中
    3,把格式器传入到文件处理器中
    """
    # 导入logging模块
    import logging
    
    # 创建一个日志器,就是一个logger对象
    logger = logging.getLogger('logger')
    
    # 设置logger输入级别
    logger.setLevel(logging.DEBUG)
    
    # 创建日志格式器
    formator = logging.Formatter(fmt="%(asctime)s [ %(filename)s ]  %(lineno)d行 | [ %(levelname)s ] | [%(message)s]",
                                 datefmt="%Y/%m/%d/%X")
    
    # 创建一个输出的处理器,让它输入到控制台
    sh = logging.StreamHandler()
    
    # 1.创建一个把日志信息存储到文件中的处理器
    # 要加编码,不然后可能会乱码
    fh = logging.FileHandler("../log/test_log_01.log", encoding="utf-8")
    
    # 把输出处理器添加到日志器中
    logger.addHandler(sh)
    
    # 给处理器添加格式器
    sh.setFormatter(formator)
    
    # 2.把文件处理器,加载到logger中
    logger.addHandler(fh)
    
    # 3.给文件处理器添加格式器
    fh.setFormatter(formator)
    
    # 输出日志信息
    logger.debug('输出debug级别的日志')
    logger.info('输出info级别的日志')
    logger.warning('输出warning级别的日志')
    logger.error('输出error级别的日志')
    logger.critical('输出critical级别的日志')
    

    2、拓展

    (1)观察代码

    看下面一段代码说明问题。

    python
    # 主要看标号1,2,3
    
    # 导入logging模块
    import logging
    
    # 创建一个日志器,就是一个logger对象
    logger = logging.getLogger('logger')
    
    # 1.设置logger日志器的日志级别为DEBUG
    logger.setLevel(logging.ERROR)
    
    # 定义日志处理器File_handler
    File_handler = logging.FileHandler('../log/all.log', encoding="utf-8")
    
    # 2.给日志处理器File_handler设置日志级别
    File_handler.setLevel(logging.WARNING)
    
    # 给处理器传入格式器
    File_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
    
    # 定义日志处理器console_handler
    console_handler = logging.StreamHandler()
    
    # 3.设置处理器日志级别
    console_handler.setLevel(logging.DEBUG)
    
    # 给处理器传入格式器
    console_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))
    
    # 把两个处理器添加到日志器中
    logger.addHandler(File_handler)
    logger.addHandler(console_handler)
    
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warning message')
    logger.error('error message')
    logger.critical('critical message')

    运行结果:

    log文件中日志:

    python
    2021-01-16 23:17:14,149 - ERROR - demo_log3.py[:33] - error message
    2021-01-16 23:17:14,150 - CRITICAL - demo_log3.py[:34] - critical message

    控制台中的日志:

    python
    2021-01-16 23:17:14,149 - ERROR - error message
    2021-01-16 23:17:14,150 - CRITICAL - critical message

    (2)提出问题

    在上面代码中:

    • logger日志器设置的日志级别是ERROR。
      logger.setLevel(logging.ERROR)
    • 文件日志处理器File_handler设置的日志级别是WARNING。
      File_handler.setLevel(logging.WARNING)
    • 控制台日志处理器console_handler设置的日志级别是DEBUG。
      console_handler.setLevel(logging.DEBUG)

    那么产生疑问:

    • 已经对日志器设置了输出级别,为什么还要对日志处理器的日志最低输出级别进行设置呢?
    • 日志器(logger)和日志处理器(handler)中设置的日志输出级别,谁的优先级更高?

    (3)问题说明

    1. 无论是logger实例还是handler实例,它们都可以设置日志的最低输出级别。
    2. logger日志器设置的日志输出等级优先级更高,其内部的处理器就不会接收到低于该级别的日志信息。
      如上面的示例,logger日志器设置的输出级别为ERROR,那么File_handlerconsole_handler只能接收到ERROR和以上级别的日志信息。
      所以看上面示例的结果可以看出,File_handlerconsole_handler处理器都只输出了ERROR级别以上的日志。
      因此在设置各handler实例输出级别时需要小心谨慎。
    3. 在实际的应用工作应用过程中,可以在日志器(logger)和日志处理器(handler)中设置不同的日志级别,相互配合,实现按业务需求过滤日志。

    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/15967150.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    SQLAlchemy学习-12.查询之 order_by 按desc 降序排序
    5.XMLHttpRequest对象
    29 drf-Vue个人向总结-2
    细胞膜仿生修饰树枝状聚酰胺-胺PAMAM/细胞膜修饰超声造影剂/介孔硅
    短剧app系统开发(对接广告联盟)源码搭建
    修复Apache Shiro身份认证绕过漏洞 (CVE-2022-32532)步骤注意事项
    马蹄集matji oj赛(第十二次)
    2.Mybatis XML 方法的基本用法
    《SpringBoot+Dubbo+Seata分布式事务实战》
    【狂神说Java】Mybatis学习笔记(上)
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/15967150.html