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