Python之logging 模块


一、日志相关概念

日志是一种可以追踪某些软件运行时所发生事件得方法。软件开发人员可以向他们得代码中调用日志记录的相关的方法

来表明发生了某些事情。

二、logging模块的日志级别

不同的应用程序所定义的日志级别时会有所差别的,logging 模块默认定于一了以下几个日志级别,它允许开发人员自动逸其他

日志级别,但是不被推荐的。

  • DEBUG  :最详细的日志信息,典型的应用场景是问题诊断
  • INFO       :信息详细程度仅次于DEBUG,通常只记录关键节点的信息,用于确认一切都是按照我们预期的那样进行工作
  • WARNING:当某些不期望的事情发生记录信息(如内存快爆满),但是此时应用程序还是正常工作的
  • ERROR    :由于一个更严重的问题导致某些功能不能正常运行时记录的信息
  • CRITICAL :当发生严重的错误,导致程序不能继续运行时记录的信息2)日志级别(Level):
     debug - info - warning -error - critical(FATA)
调试 基本 警告 报错 严重错误

三、简单的日志输出

from logging import handlers  # 生成滚动日志时需要用 handlers.RotatingFileHandler,所以在这里需要导入 handlers 模块

import logging

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

#第二步:设置自定义要收集的日志级别、日志格式、输出渠道
#1、设置 自定义要收集的日志级别
logger.setLevel(logging.INFO)  # logging.INFO:表示手机INFO级别以上的日志

#2、设置自定义的日志格式(Formatter)

# 时间:年月时分秒 +  收集器的名字  +  级别 +  哪个文件的日志 +  行号 + 想要提示的信息
fmt_str = "%(asctime)s %(name)s %(levelname)s %(filename)s %(lineno)d %(message)s"

#实例化一个日志格式类
formatter = logging.StreamHandler()
#3、设置日志输出渠道
handler1 = logging.StreamHandler() # 表示日志可以输出到控制台

#第三步:设置日志输出渠道当中的日志显示格式
handlerl.setFormatter(formatter)

#第四步:将日志输出渠道与日志收集器绑定起来
logger.addHandler(handler1)

logger.info("hello,logging!!!")

拓展知识:上面我们只是演示了将日志输出到控制台的一种方式,但是如果我们想要用一个文件夹单独收集日志可不可以呢?那当然是可以的,代码以下:

#拓展:第二个渠道)实例化文件渠道(FileHandle)
#FileHandler :表示每一次生成的日志都是最新的
#handle2 = logging.FileHandler("rizhi_shoujiqi.log", encoding="utf-8")

#如果我们想到显示每一次的日志记录,那么可以采用滚动生成日志的方式
#滚动生成的区别:FileHandler 用 RotatingFileHandler  来替换,增加 maxBytes=1,backupCount=10 字段
handle2 = handlers.RotatingFileHandler("nmb-py37",maxBytes=1,backupCount=10,encoding="utf-8")

# 设置渠道当中的日志显示格式
handle2.setFormatter(formatter)
# 将渠道与日志收集器绑定起来
logger.addHandler(handle2)

# (指定handle3的日志级别为ERROR)文件渠道(FileHandle) handle3 = logging.FileHandler("rizhi_shoujiqi_error.log", encoding="utf-8") # 设置渠道当中的日志显示格式 handle3.setFormatter(formatter) # 设置handle3的日志输出级别为ERROR handle3.setLevel(logging.ERROR) # 将渠道与日志收集器绑定起来 logger.addHandler(handle3) logger.info("hello,logging!!") logger.warning("hello,warning!!") logger.error("你错了!!")