AI智能
改变未来

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

[toc]

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

代码如下所示:

"""logging模块是Python的内置模块,不需要安装。步骤:1,创建一个把日志信息保存到文件中的处理器FileHandler2,把文件处理器添加到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)观察代码

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

# 主要看标号1,2,3# 导入logging模块import logging# 创建一个日志器,就是一个logger对象logger = logging.getLogger(\'logger\')# 1.设置logger日志器的日志级别为DEBUGlogger.setLevel(logging.ERROR)# 定义日志处理器File_handlerFile_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_handlerconsole_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文件中日志:

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

控制台中的日志:

2021-01-16 23:17:14,149 - ERROR - error message2021-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_handler

    console_handler

    只能接收到ERROR和以上级别的日志信息。所以看上面示例的结果可以看出,

    File_handler

    console_handler

    处理器都只输出了ERROR级别以上的日志。因此在设置各

    handler

    实例输出级别时需要小心谨慎。

  3. 在实际的应用工作应用过程中,可以在日志器(
    logger

    )和日志处理器(

    handler

    )中设置不同的日志级别,相互配合,实现按业务需求过滤日志。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 『无为则无心』Python日志 — 66、将日志信息保存到文件中