logging — Python的日志收集

什么是日志

日志也叫 log,通常对应的 xxx.log 的日志文件。文件的作用是记录系统运行过程中,产生的信息。

搜集日志的作用

查看系统运行是否正常。
分析、定位 bug。

日志的级别

  • logging.DEBUG:调试级别【高】
  • logging.INFO:信息级别【次高】
  • logging.WARNING:警告级别【中】
  • logging.ERROR:错误级别【低】
  • logging.CRITICAL:严重错误级别【极低】
特性:
日志级别设定后,只有比该级别低的日志会写入日志。
如:设定日志级别为 info 时,只会写入infowarning、error、critical 级别的日志信息,不会写入 debug 的。

日志代码实现分析

====日志代码,无需手写实现。会修改、调用即可!====
步骤:
  • # 0. 导包
  • # 1. 创建日志器对象
  • # 2. 设置日志打印级别(选一个)
    • # logging.DEBUG 调试级别
    • # logging.INFO 信息级别
    • # logging.WARNING 警告级别
    • # logging.ERROR 错误级别
    • # logging.CRITICAL 严重错误级别
  • # 3. 创建处理器对象
    • # 创建 输出到控制台 处理器对象
    • # 创建 输出到日志文件 处理器对象(设置文件名、when、interval、backupCount)
  • # 4. 创建日志信息格式
  • # 5. 将日志信息格式设置给处理器
    • # 设置给 控制台处理器
    • # 设置给 日志文件处理器
  • # 6. 给日志器添加处理器
    • # 给日志对象 添加 控制台处理器
    • # 给日志对象 添加 日志文件处理器
  • # 7. 打印日志
import logging.handlers
import logging
import time

# 1. 创建日志器对象
logger = logging.getLogger()

# 2. 设置日志打印级别
logger.setLevel(logging.DEBUG)
# logging.DEBUG 调试级别
# logging.INFO 信息级别
# logging.WARNING 警告级别
# logging.ERROR 错误级别
# logging.CRITICAL 严重错误级别

# 3.1 创建 输出到控制台 处理器对象
st = logging.StreamHandler()
# 3.2 创建 输出到日志文件 处理器对象
fh = logging.handlers.TimedRotatingFileHandler('a.log', when='midnight', interval=1, backupCount=3, encoding='utf-8')
# when 字符串,指定日志切分间隔时间的单位。midnight:凌晨:12点。
# interval 是间隔时间单位的个数,指等待多少个 when 后继续进行日志记录
# backupCount 是保留日志文件的个数

# 4. 创建日志信息格式
fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
formatter = logging.Formatter(fmt)

# 5.1 日志信息格式 设置给 控制台处理器
st.setFormatter(formatter)
# 5.2 日志信息格式 设置给 日志文件处理器
fh.setFormatter(formatter)

# 6.1 给日志器对象 添加 控制台处理器
logger.addHandler(st)
# 6.2 给日志器对象 添加 日志文件处理器
logger.addHandler(fh)

# 7. 打印日志
while True:
    # logging.debug('我是一个调试级别的日志')
    logging.info('我是一个信息级别的日志')
    # logging.warning('我是一个警告级别的日志')
    # logging.error('我是一个错误级别的日志')
    # logging.critical('我是一个严重错误级别的日志')
    time.sleep(1)

日志使用

1. 创建init_log_config() 函数,编写日志。 
2. 调用 init_log_config() 函数,初始化日志信息。 
3. 指定日志级别,打印日志信息。
import logging.handlers
import logging
import time

def init_log_config(filename, when='midnight', interval=1, backup_count=7):
    """
    功能:初始化日志配置函数
    :param filename: 日志文件名
    :param when: 设定日志切分的间隔时间单位,midnight:凌晨12点,即1天
    :param interval: 间隔时间单位的个数,指等待多少个when后继续进行日志记录。取值1表示1个midnight
    :param backup_count: 保留日志文件的个数。取值7表示最多保留7个日志文件
    :return:
    """
    # 1. 创建日志器对象
    logger = logging.getLogger()

    # 2. 设置日志打印级别
    logger.setLevel(logging.DEBUG)
    # logging.DEBUG 调试级别
    # logging.INFO 信息级别
    # logging.WARNING 警告级别
    # logging.ERROR 错误级别
    # logging.CRITICAL 严重错误级别

    # 3. 创建处理器对象
    # 控制台对象
    st = logging.StreamHandler()
    # 日志文件对象
    fh = logging.handlers.TimedRotatingFileHandler(filename, when=when,
                                                   interval=interval, backupCount=backup_count, encoding='utf-8')

    # 4. 日志信息格式
    fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
    formatter = logging.Formatter(fmt)

    # 5. 给处理器设置日志信息格式
    st.setFormatter(formatter)
    fh.setFormatter(formatter)

    # 6. 给日志器添加处理器
    logger.addHandler(st)
    logger.addHandler(fh)


if __name__ == '__main__':
    # 初始化日志
    init_log_config('a.log')
    # 打印输出日志信息(只能打印debug级别或比其低的级别)
    logging.debug('我是一个调试级别的日志')

上面封装的方法,已经设置同时打印到控制台和日志文件中。在需要 print 的地方就能调用它使用了。

比如下面:打印响应结果

日志使用示例二:

日志封装方法 set_log ()

用日期给日志文件命名。如:2023-11-13.log

 

posted @ 2023-08-31 18:53  鹿先森JIAN  阅读(94)  评论(0编辑  收藏  举报