日志模块
import logging
logging.basicConfig(
filename='a.log', # 指定文件打印路径,不指定文件名会默认打印到控制台
filemode='a', # 默认是a模式,可以不写
format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
datefmt='%Y-%m-%d %X %p', # 定制(asctime)的时间格式
level=10 # 设置日志的级别,代表当前级别及以上级别都可以打印
)
# 打印格式
# %(asctime)s %(name)s %(levelname)s %(module)s: %(message)s
# 格式化时间 日志名称 日志的级别 当前使用日志的模块名 日志具体的信息
logging.debug('调试信息') # 10
logging.info('运行结果') # 20
logging.warning('一级警告') # 30 { 不同数字代表不同的级别
logging.error('二级警告') # 40
logging.critical('三级警告') # 50
# logging模块的四类对象
# logger 负责产生日志
logger1 = logging.getLogger('') # 使用getLogger产生一个产生日志的对象
# filter 过滤日志(不常用)
# handler 控制日志打印到文件或是终端
# 可能很多文件都需要用到日志,所以可以在多个文件内打印
fh1 = logging.FileHandler(filename='a1.log', encoding='utf-8') # 控制文件打印路径
fh2 = logging.FileHandler(filename='a2.log', encoding='utf-8') # 控制文件打印路径
sh = logging.StreamHandler() # 控制日志打印到终端
# formatter 控制日志的格式
fmt1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
datefmt='%Y-%m-%d %X %p'
)
fmt2 = logging.Formatter(
fmt='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %X %p'
)
# 让logger1对象产生的日志可以分别打印到不同的地方,要让他们绑定关系
logger1.addHandler(fh1)
logger1.addHandler(fh2) # handler对象
logger1.addHandler(sh)
# 让logger1对象所绑定的handler对象再次绑定打印格式
fh1.setFormatter(fmt1)
fh2.setFormatter(fmt1)
sh.setFormatter(fmt2)
# 日志级别
# 日志级别要必须通过两层关卡(logger1级别,文件级别)才可以正常记录
logger1.setLevel(10) # 基础级别,可以打印所有级别的信息
fh1.setLevel(20) # 只处理打印大于等于20级别的信息
fh2.setLevel(30) # 只处理打印大于等于30级别的信息
sh.setLevel(40) # 只处理打印大于等于40级别的信息
logger1.warning('调试信息') # 注意本层级别要 >= logger1的级别
了解:日志继承
import logging
logger1 = logging.getLogger('grandfather')
logger2 = logging.getLogger('grandfather.father') # 继承关系要在设置文件名时将子集放置父集后
logger3 = logging.getLogger('grandfather.father.son')
sh = logging.StreamHandler()
fmt3 = logging.Formatter(
fmt='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %X %p'
)
sh.setFormatter(fmt3)
logger1.addHandler(sh)
logger2.addHandler(sh)
logger3.addHandler(sh)
logger1.setLevel(10)
logger2.setLevel(10)
logger3.setLevel(10)
sh.setLevel(10)
logger3.debug('----------') # logger3会将得到的所有信息反继承给logger3的所有父集日志模块
import logging
l