【python】日志模块以及日志组件使用

1. 日志级别

级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

logging.critical()  -->输出CRITICAL级别日志
logging.error()     -->输入ERROR级别日志
logging.warning()     -->输入WARNING级别日志
logging.info()     -->输入INFO级别日志
logging.debug()     -->输入DEBUG级别日志
# 案例:在控制台分别输出各个级别的日志
import logging

logging.critical('critical日志信息') # CRITICAL:root:critical日志信息  root是默认日志器的名字
logging.error('error日志信息') #ERROR:root:error日志信息
logging.warning('warning日志信息')
logging.info('info日志信息')
logging.debug('debug日志信息')

# print(a) #NameError: name 'a' is not defined

# CRITICAL:root:critical
# root是默认日志器的名字;默认的日志器默认日志级别:warning   --筛选日志信息的显示

# 总结:默认只输入Warning级别及以上级别的日志,如果需要查看到所有的日志,则需要改变默认日志级别

# 改变默认日志器的日志级别

2. 设置日志格式

logging.basicConfig()函数可以设置日志级别,日志的格式以及日志的位置等。
# 案例:设置日志级别和日志格式,要求在控制台分别输出各个级别的日志,并将日志保存在本地文件
import logging

# 默认日志器的设置操作
# 1-输出位置的设置
logging.basicConfig(filename = 'test2.log',filemode='a')
# 存在一个问题,如果日志信息中有中文,则会显示乱码
# 可以用stream来进行解决
file = open('test3.log','a',encoding='utf-8')
logging.basicConfig(stream = file)

# 2-级别设置
#logging.basicConfig(level = logging.DEBUG)

# 3-格式设置
logging.basicConfig(format = '%(asctime)s ** %(levelname)s ** %(message)s -->%(filename)s:%(lineno)d')

logging.critical('critical日志信息') # CRITICAL:root:critical日志信息  root是默认日志器的名字
logging.error('error日志信息') #ERROR:root:error日志信息
logging.warning('warning日志信息')
logging.info('info日志信息')
logging.debug('debug日志信息')

# 日志级别对应的数字
# critical:50
# error:40
# warning:30
# info:20
# debug:10


3. 日志组件

日志的四大组件:日志器、处理器、过滤器、格式器

    日志器:产生各级别日志的载体
    处理器:日志显示在哪个位置(控制台、本地的文件中)
        控制台处理器:将日志输出在控制台
        文件处理器:将日志输出在文件中
    过滤器:过滤/筛选日志
    格式器:设置日志显示的内容以及自定义格式

3.1 控制台处理器

日志器+控制台处理器
创建日志器 logger=logging.getLogger()
    日志器设置日志界别
创建控制台处理器 h=logging.StreamHandler()
    处理器设置日志界别
日志器添加处理器  logger.addHandler(h)
输出日志
# 案例:自定义日志器和处理器,并在控制台输出所有的级别的日志信息
import logging
# 创建日志器
log = logging.getLogger('kate')
# 创建控制台处理器
s_handler = logging.StreamHandler()
# 日志器添加处理器
log.addHandler(s_handler)
# 输出日志
log.critical('critical日志信息') # CRITICAL:root:critical日志信息  root是默认日志器的名字
log.error('error日志信息') #ERROR:root:error日志信息
log.warning('warning日志信息')
log.info('info日志信息')
log.debug('debug日志信息')

总结:自定义的日志器默认的日志级别也是warning,所以只能输出警告及以上级别的日志信息
 

# 如何输出所有级别的日志信息
# 1:日志器可以设置日志级别
# 2:处理器也可以设置日志级别
#
import logging
# 创建日志器
log = logging.getLogger('kate')
# 日志器设置日志级别
# log.setLevel(level = logging.DEBUG)

# 创建控制台处理器
s_handler = logging.StreamHandler()
# 处理器设置日志级别
s_handler.setLevel(level = logging.DEBUG)

# 总结:当日志器和处理器同时设置了日志级别时,谁设置的日志级别高就用谁的设置

# 问题:当日志器没有设置级别,但是处理器设置为DEBUG级别之后,日志信息也只是显示warning及以上的日志信息?
# 日志器没有设置级别的时候,默认是warning ,warning>DEBUG,所以显示warning及以上的日志信息

# 日志器添加处理器
log.addHandler(s_handler)
# 输出日志
log.critical('critical日志信息') # CRITICAL:root:critical日志信息  root是默认日志器的名字
log.error('error日志信息') #ERROR:root:error日志信息
log.warning('warning日志信息')
log.info('info日志信息')
总结:当日志器和处理器同时都设置了日志级别,则谁的级别高就以谁为准

3.2   日志器+文件处理器

创建日志器 logger=logging.getLogger()
    日志器设置日志级别:logger.setLevel(logging.DEBUG)
创建文件处理器 h=logging.FileHandler(filename, mode='a', encoding=None)
    文件处理器设置日志级别:h..setLevel(logging.INFO)
日志器添加处理器  logger.addHandler(h)
日志输出
# 案例:自定义日志器和文件处理器,并在文件中保存所有的级别的日志信息
import logging
# 创建日志器
log = logging.getLogger('kate')
# 创建文件处理器
s_handler = logging.FileHandler(filename='demo1.log',encoding='utf-8')
# 日志器添加处理器
log.addHandler(s_handler)
# 输出日志
log.critical('critical日志信息') # CRITICAL:root:critical日志信息  root是默认日志器的名字
log.error('error日志信息') #ERROR:root:error日志信息
log.warning('warning日志信息')
log.info('info日志信息')
log.debug('debug日志信息')
总结:自定义的日志器默认的日志级别也是警告,所以只能输出警告及以上级别的日志信息

 如何输出所有级别的日志信息
 1:日志器可以设置日志级别
 2:文件处理器也可以设置日志级别
 总结:当日志器和处理器同时都设置了日志级别,则谁的级别高就以谁为准

3.3 格式处理器

创建日志器:logger=logging.getLogger()
    日志器设置日志级别:logger.setLevel(logging.DEBUG)
创建处理器:s_hand=logging.StreamHandler()
    处理器设置日志级别:s_hand.setLevel(logging.INFO)
创建格式器:format1=logging.Formatter(fmt="%(levelname)s === %(message)s")
日志器添加处理器:logger.addHandler(h)
处理器添加格式器:s_hand.setFormatter(format1)
日志输出
#案例:自定义日志器、处理器和格式器,分别在控制台和文件中记录日志信息,并且给日志信息设置不同的格式
import logging
# 创建日志器
log = logging.getLogger('kate')

# 创建控制台处理器
s_handler = logging.StreamHandler()

# 创建一个文件处理器
f_handler = logging.FileHandler(filename = 'demo2.log',encoding='utf-8')

# 日志器添加处理器
log.addHandler(s_handler)
log.addHandler(f_handler)

# 创建一个格式器
f1 = logging.Formatter(fmt= '%(asctime)s**%(levelname)s**%(filename)s:'
                            '%(lineno)d:%(message)s==%(name)s')   # 日志器的名字:%(name)s
f2 = logging.Formatter(fmt= '%(asctime)s**%(levelname)s**%(message)s')
# 处理器设置格式器
s_handler.setFormatter(f2)  #控制台处理器日志添加了指定的格式f2
f_handler.setFormatter(f1)  # 文件处理器日志添加了指定的格式f1

# 输出日志
log.critical('critical日志信息') # CRITICAL:root:critical日志信息  root是默认日志器的名字
log.error('error日志信息') #ERROR:root:error日志信息
log.warning('warning日志信息')
log.info('info日志信息')
log.debug('debug日志信息')
如何将日志记录在控制台和文件中,并且两个日志保存的级别和格式都不相同
1-日志器设置日志级别
2-控制器设置日志级别
需求:控制台输出error以上的日志,文件中保存debug以上的日志信息
控制台输出error以上的日志:
    日志设置日志级别:debug
    控制台处理器设置日志级别:error
    
文件输出debug以上的日志:
    日志设置日志级别:debug
    文件处理器设置日志级别:debug
import logging
# 创建日志器
log = logging.getLogger('kate')
# 日志设置日志级别:DEBUG
log.setLevel(logging.DEBUG)

# 创建控制台处理器
s_handler = logging.StreamHandler()
# 控制台处理器设置日志级别:error
s_handler.setLevel(logging.ERROR)

# 创建一个文件处理器
f_handler = logging.FileHandler(filename = 'demo3.log',encoding='utf-8')
# 文件处理器设置日志级别:debug
f_handler.setLevel(logging.DEBUG)

# 日志器添加处理器
log.addHandler(s_handler)
log.addHandler(f_handler)

# 创建一个格式器
f1 = logging.Formatter(fmt= '%(asctime)s**%(levelname)s**%(filename)s:'
                            '%(lineno)d:%(message)s==%(name)s')   # 日志器的名字:%(name)s
f2 = logging.Formatter(fmt= '%(asctime)s**%(levelname)s**%(message)s')
# 处理器设置格式器
s_handler.setFormatter(f2)  #控制台处理器日志添加了指定的格式f2
f_handler.setFormatter(f1)  # 文件处理器日志添加了指定的格式f1

# 输出日志
log.critical('critical日志信息') # CRITICAL:root:critical日志信息  root是默认日志器的名字
log.error('error日志信息') #ERROR:root:error日志信息
log.warning('warning日志信息')
log.info('info日志信息')
log.debug('debug日志信息')

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值