自定义封装日志模块和调用

本文详细介绍了Python中的日志模块使用,包括日志级别、日志格式的定制,以及日志的四大组件:日志器、处理器、过滤器和格式器的运用。通过示例展示了如何配置控制台和文件处理器,以及如何设置不同的日志级别和格式。最后,文章还探讨了日志的封装和调用,提供了一个日志封装类的实现。
摘要由CSDN通过智能技术生成

一、日志模块基本使用

import logging
'''日志级别:默认输出warning级别以上日志信息
CRITICAL:严重错误  -->logging.critical(msg)
ERROR:错误  -->logging.error()
WARNING:警告 -->logging.warning()
INFO:信息 -->logging.info()
DEBUG:最详细的日志  -->logging.debug()
'''
logging.basicConfig(level=logging.ERROR)#logging.WARNING
logging.critical('严重错误')
logging.error('错误')
logging.warning('警告')
logging.info('信息')
logging.debug('调试日志')

'''日志格式:
logging.basicConfig()函数还可以定制输出日志的格式:
logging.basicConfig(format="%(asctime)s %(name)s %(levelname)s %(message)s")
'''
logging.basicConfig(format='%(lineno)d:%(levelname)s:%(filename)s:%(asctime)s**** %(message)s')
logging.critical('严重错误')
logging.error('错误')
logging.warning('警告')
logging.info('信息')
logging.debug('调试日志')

二、日志的组件

'''日志的四大组件:
日志器:Logger  --创建日志
处理器:Handler  --将日志输出在合适的位置,控制台、本地文件
过滤器:Filter  --控制日志输出的详细程度,筛选过滤
格式器:Formatter  --决定日志的最终格式
'''

'''方式一:日志器-处理器(控制台处理器)-添加处理器-日志输出
创建控制台处理器 h=logging.StreamHandler()
'''
# import logging
# # 日志器
# logger=logging.getLogger()
# # 处理器
# s_hand=logging.StreamHandler()   #控制台输出
# # 日志器添加处理器
# logger.addHandler(s_hand)
# # 日志输出
# logger.critical('严重错误')
# logger.error('错误')
# logger.warning('警告')
# logger.info('信息')
# logger.debug('调试日志')


'''方式二:日志器-日志器日志级别-处理器(控制台处理器)-添加处理器-日志输出'''
# import logging
# # 日志器
# logger=logging.getLogger()
# # 日志器设置日志级别
# logger.setLevel(logging.DEBUG)
# # 处理器
# s_hand=logging.StreamHandler()   #控制台输出
# # 日志器添加处理器
# logger.addHandler(s_hand)
# # 日志输出
# logger.critical('严重错误')
# logger.error('错误')
# logger.warning('警告')
# logger.info('信息')
# logger.debug('调试日志')

'''方式三:日志器-处理器(控制台处理器)-处理器日志级别-添加处理器-日志输出
'''
# import logging
# # 日志器
# logger=logging.getLogger()
# # 处理器
# s_hand=logging.StreamHandler()   #控制台输出
# # 处理器添加日志级别
# s_hand.setLevel(logging.ERROR)
# # 日志器添加处理器
# logger.addHandler(s_hand)
# # 日志输出
# logger.critical('严重错误')
# logger.error('错误')
# logger.warning('警告')
# logger.info('信息')
# logger.debug('调试日志')


'''方式四:日志器-日志器日志级别--处理器(控制台处理器)-处理器日志级别-添加处理器-日志输出
在两者都设置了日志级别时,最终输出的级别由设置级别高代码决定
'''
import logging
# 日志器
logger=logging.getLogger()
# 日志器设置日志级别
logger.setLevel(logging.INFO) #debug
# 处理器
s_hand=logging.StreamHandler()   #控制台输出
# 处理器添加日志级别
s_hand.setLevel(logging.DEBUG)  #error
# 日志器添加处理器
logger.addHandler(s_hand)
# 日志输出
logger.critical('严重错误')
logger.error('错误')
logger.warning('警告')
logger.info('信息')
logger.debug('调试日志')

'''文件处理器:
方式一:日志器-处理器(文件处理器)-添加处理器-日志输出

创建文件处理器 h=logging.FileHandler(filename, mode='a', encoding=None)
    filename:文件名
    mode:打开文件的格式
    encoding:文件编码格式
总结:
一个日志器可以添加多个处理器
每个处理器可以设置不同的日志级别

'''
# import logging
# # 日志器
# logger=logging.getLogger()
# # 处理器
# f_hand=logging.FileHandler('文件日志.log',encoding='utf-8')   #文件输出
# # 日志器添加处理器
# logger.addHandler(f_hand)
# # 日志输出
# logger.critical('critical严重错误')
# logger.error('error错误')
# logger.warning('warning警告')
# logger.info('info信息')
# logger.debug('debug调试日志')

'''方式二:日志器-日志器日志级别-处理器(文件处理器)-添加处理器-日志输出'''
# import logging
# # 日志器
# logger=logging.getLogger()
# # logger.setLevel(logging.INFO)  #默认是WARNING
# # 处理器
# f_hand=logging.FileHandler('文件日志.log',encoding='utf-8')   #文件输出
# f_hand.setLevel(logging.DEBUG)  #debug
# # 日志器添加处理器
# logger.addHandler(f_hand)
#
# # 日志输出
# logger.critical('21critical严重错误')
# logger.error('21error错误')
# logger.warning('21warning警告')
# logger.info('21info信息')
# logger.debug('21debug调试日志')

'''方式三:日志器-日志器日志级别-处理器(文件处理器)-处理器日志级别-添加处理器-日志输出

在两者都设置了日志级别时,最终输出的级别由设置级别高代码决定
'''
# import logging
# # 日志器
# logger=logging.getLogger()
# logger.setLevel(logging.INFO)  #默认是WARNING
# # 处理器
# f_hand=logging.FileHandler('文件日志.log',encoding='utf-8')   #文件输出
# f_hand.setLevel(logging.DEBUG)  #debug
# # 日志器添加处理器
# logger.addHandler(f_hand)
#
# # 日志输出
# logger.critical('21critical严重错误')
# logger.error('21error错误')
# logger.warning('21warning警告')
# logger.info('21info信息')
# logger.debug('21debug调试日志')

'''方式四:日志器--日志处设置日志级别
          处理器1(控制台处理器)--处理器1日志级别
          处理器2(文件处理器)-处理器2日志级别
          添加处理器-日志输出
'''
import logging
# 日志器
logger=logging.getLogger()
# 设置日志级别
logger.setLevel(logging.DEBUG)

# 处理器1  控制台处理器
s_hand=logging.StreamHandler()
s_hand.setLevel(logging.WARNING)  #warning级别以上

# 处理器2 文件处理器
f_hand=logging.FileHandler('test.log',encoding='utf-8')
f_hand.setLevel(logging.INFO)  #info级别以上

# 日志器添加处理器1
logger.addHandler(s_hand)

# 日志器添加处理器2
logger.addHandler(f_hand)

# # 日志输出
logger.critical('critical严重错误')
logger.error('error错误')
logger.warning('warning警告')
logger.info('info信息')
logger.debug('debug调试日志')


'''格式处理器:
方式:日志器--日志处理器
          处理器1(控制台处理器)--处理器1日志级别-添加处理器1
          处理器2(文件处理器)-处理器2日志级别-添加处理器2
          创建格式器1--处理器1添加格式器1
          创建格式器2--处理器2添加格式器2
          日志输出'''
 '''总结:
1个日志器可以添加多个处理器
不同处理器可以添加不同格式器'''

import logging
# 日志器
logger=logging.getLogger()
# 设置日志级别
logger.setLevel(logging.DEBUG)

# 处理器1  控制台处理器
s_hand=logging.StreamHandler()
s_hand.setLevel(logging.WARNING)  #warning级别以上

# 处理器2 文件处理器
f_hand=logging.FileHandler('test_format.log',encoding='utf-8')
f_hand.setLevel(logging.INFO)  #info级别以上

# 日志器添加处理器1
logger.addHandler(s_hand)

# 日志器添加处理器2
logger.addHandler(f_hand)

# 格式器1
f1=logging.Formatter(fmt='[%(filename)s]: [%(levelname)s]  [%(asctime)s]:%(lineno)d-->>%(message)s',
                    datefmt='%Y-%m-%d')
# 处理器2 格式器1  文件
f_hand.setFormatter(f1)

# 格式器2
f2=logging.Formatter(fmt='[%(asctime)s]:[%(levelname)s] -->>%(message)s')
# 处理器1 格式器2   控制台
s_hand.setFormatter(f2)

# # 日志输出
logger.critical('critical严重错误')
logger.error('error错误')
logger.warning('warning警告')
logger.info('info信息')
logger.debug('debug调试日志')



三、封装和调用

'''日志封装
创建日志器-日志器设置日志级别
创建处理器
    文件处理器-处理器添加格式器
    控制台处理器-处理器添加格式器
创建格式器
    格式器1
    格式器2
返还日志器
    日志器添加文件处理器
    日志器添加控制台处理器
    返还日志器
'''
import logging
class Logger():
    def __init__(self,level=logging.DEBUG):
        '''创建日志器'''
        self.log=logging.getLogger()
        self.log.setLevel(level)

    def add_StreanHandle(self,level=logging.INFO):
        '''控制台处理器'''
        self.s_hand=logging.StreamHandler()
        self.s_hand.setLevel(level)
        self.s_hand.setFormatter(self.getFormatter()[0])  #f1
        return self.s_hand

    def add_FileHandle(self,file,level=logging.DEBUG):
        '''文件处理器'''
        self.f_hand = logging.FileHandler(filename=file,encoding='utf-8')
        self.f_hand.setLevel(level)
        self.f_hand.setFormatter(self.getFormatter()[1])  # f2
        return self.f_hand

    def getFormatter(self):
        '''格式器'''
        self.f1 = logging.Formatter(fmt='[%(asctime)s]:[%(levelname)s] -->>%(message)s')
        self.f2 = logging.Formatter(fmt='[%(filename)s]: [%(levelname)s]  [%(asctime)s]:%(lineno)d-->>%(message)s',
                                    datefmt='%Y-%m-%d')
        return self.f1,self.f2

    def get_log(self,file='日志.log'):
        '''返回日志'''
        # 日志器添加控制台处理器
        self.log.addHandler(self.add_StreanHandle())
        # 日志器添加文件处理器
        self.log.addHandler(self.add_FileHandle(file))
        return self.log

from selenium import webdriver
from 日志封装 import Logger

# 实例化对象
l=Logger()
# 调用get_log
logger=l.get_log(file='baidu.log')

driver=webdriver.Firefox()
url='https://www.baidu.com'
logger.info('正在打开网站{}'.format(url))
driver.get(url)
search='python'
logger.info('找到百度搜索框,输入{}'.format(search))
driver.find_element_by_id('kw').send_keys(search)

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XB_tonticc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值