首先介绍一下:
logging --是python自带的一个日志模块
它的作用主要有两个。
1、代替print,可以把大部分想要调试的信息打印出来或者是输出到指定的文件。
2、可以对一些输出的调试信息分类做输出,级别控制。
那么它的级别分为:debug/info/warning/error/critical
分别代表的意思:调试、打印、警告、错误、严重错误警告
每一级都是渐渐深入的过程。
运行下面一段代码:
import logging
# 级别控制:# 默认收集的是 warning (包括warning)以上的问题
logging.debug('小小今天很活跃')
logging.info('小小666')
logging.warning('pp')
logging.error('lll')
logging.critical('小夏')
控制台输出的是:
WARNING:root:pp
ERROR:root:lll
CRITICAL:root:小夏
为什么?因为默认收集的是 warning (包括warning)以上的问题
WARNING:root:pp 代表什么意思,即是:级别、日志收集器默认为root、内容
3、写日志需要经过的两个渠道:
Logger 收集日志 debug info error
handdler 输出日志的渠道,指定的文件,还是控制台,一般默认到控制台
import logging
# 定义一个日志收集器 # 如果不设置级别 或者 'python11' 为空,那么它将会默认从warning以上去收集(不包含warning)
my_logger = logging.getLogger('python11')
# 设定级别 注意的是 DEBUG 要大写
my_logger.setLevel('DEBUG')
# 创建我们自己的输出渠道,StreamHandler 输出到控制台
ch = logging.StreamHandler()
ch.setLevel('DEBUG')
# 把收集渠道和输出渠道对接
my_logger.addHandler(ch)
# 收集日志
my_logger.debug('python11期')
my_logger.info('pyton11期,6')
my_logger.error('python11期,最强!')
因为我们日志收集器设定的级别是:DEBUG 还有我们输出渠道定义的也是DEBUG,所有我们采集信息日志是从DEBUG开始采集的。
所以输出到控制台的结果是:
python11期
pyton11期,6
python11期,最强!
4、logging的应用:
(a)
import logging
# 创建一个收集器
my_logging = logging.getLogger('项目名称')
# 定义级别,收集的是DEBUG以上的级别
my_logging.setLevel('DEBUG')
# 定义一个输出到控制台的渠道Stream-->控制台Handler组织
ch = logging.StreamHandler()
# 定义一个输出到文件渠道
fh = logging.FileHandler('fhandler.txt', encoding='utf-8')
# 设置输出控制器的级别 输出的时候包含定义的级别,其中输出到控制台是error以上级别,输出到文本的是debug以上级别
ch.setLevel('ERROR')
fh.setLevel('DEBUG')
# 把收集控制器和输出控制器连接起来 指定到输出渠道
my_logging.addHandler(ch)
my_logging.addHandler(fh)
# 采集信息
my_logging.debug('控制住这条信息debug')
my_logging.info('控制住这条信息info')
my_logging.warning('控制住这条信息warning')
my_logging.error('控制住这条信息error')
my_logging.critical('控制住这条信息critical')
# 关闭日志收集器
my_logging.removeHandler(ch)
my_logging.removeHandler(fh)
输出结果是:
(b)
formatter:决定日志记录的最终输出格式(不然日志会乱七八糟)Formatter对象定义了最终log信息的顺序,
结构和内容,规定了日志输出按照什么样的格式,默认的时间格式为:%Y-%m-%d %H:%M:%S,下面是 formatter 常用的一些信息
import logging
# 创建一个收集器 名称:收到错误级别
my_logging = logging.getLogger('项目')
# 定义级别,收集的是DEBUG以上的级别
my_logging.setLevel('DEBUG')
# 设置输出格式:包括时间、级别、项目名,还有执行文件名等等
formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息:%(message)s')