python中logging模块使用
一,引入logging模块,logging模块的基本使用
import logging #日志的等级级别debug<info<warning<error<crital logging.root.setLevel('DEBUG')#logging默认的日志收集器是root,默认的收集级别是warning logging.debug('debug级别的日志') logging.info('info级别的日志') logging.warning('warning级别的日志') logging.error('error级别的日志') logging.critical('critical级别的日志')
二,创建日志收集器
import logging #创建一个名为TEST的日志收集器 test_log=logging.getLogger(TEST) #设置日志收集级别,但是此处输出到控制台还是默认是从warning输出 test_log.setLevel('DEBUG')
三,创建日志输出渠道,StreamHandler是输出到控制台
sh = logging.StreamHandler() #设置输出级别 sh.setLevel('INFO')
四,将日志输出渠道添加到日志收集器中
test_log.addHandler(sh)
五,输出到文件,FileHandler输出到文件中,test.log输出的日志文件名,不指定路径文件默认生成在当前路径下
fh = logging.FileHandler('test.log',encoding='utf-8') #设置输出级别 fh.setLevel('ERROR')
六,将日志输出渠道添加到日志收集器中
test_log.addHandler(fh) #调试一下 test_log.debug('=============debug=============') test_log.info('=============info=============') test_log.warning('=============warning=============') test_log.error('=============error=============') test_log.critical('=============critical=============')
七,设置日志格式,使用logging.Formatter函数,以输出到文件为例,输出到控制台一样,格式可以替换参数,可以在Formatter函数中选取自己需要的参数进行替换
log_format =logging.Formatter('%(asctime)s - %(funcName)s -[%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s') fh = logging.FileHandler('test.log',encoding='utf-8') #设置输出级别 fh.setLevel('ERROR') #设置输出格式 fh.setFormatter(log_format) test_log.addHandler(fh)
八,设置轮询,可选择时间轮询或者文件大小轮询,达到轮询限制则会新建文件保存log
#文件大小轮询 from logging.handlers import RotatingFileHandle #fh = logging.FileHandler('test.log',encoding='utf-8')用下方语句进行替换 fh= RotatingFileHandler('test.log', encoding='utf-8', maxBytes=1024*1024*20,#1024个字节为1K,左边为20M上限 backupCount=3)#最多备份三个文件 #时间轮询 from logging.handlers import TimedRotatingFileHandler #时间轮询,S - Seconds,M - MinutesH - Hours,D - Days, fh = TimedRotatingFileHandler(filename, encoding='utf-8', when='d',#按天轮询 interval=7,#7天一个轮回 backupCount=7)#备份7个文件
九,代码封装起来,总代码块,直接引用即可
import logging from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler def handle_log(name,level,sh_level,fh_level,filename,rounds=None): """ :param name:日志收集器的名称 :param level:日志收集级别 :param sh_level:控制台输出级别 :param fh_level:文本输出级别 :param filename:日志文件的名称 :param rounds:轮询方式 :return:logger """ # 1.创建一个自己的日志收集器 logger = logging.getLogger(name) # 2.设置日志收集的级别 logger.setLevel(level) # 设置输出格式 log_format = logging.Formatter('%(asctime)s - %(name)s -[%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s') # 3.创建日志输出渠道 # 输出到控制台 sh = logging.StreamHandler() sh.setLevel(sh_level) sh.setFormatter(log_format) # 4.将日志输出渠道添加到日志收集器中 logger.addHandler(sh) # 5.输出到文件,并设置输出格式, # 设置轮询器,以大小轮询 if rounds == 'size': fh= RotatingFileHandler(filename, encoding='utf-8', maxBytes=1024*1024*20, backupCount=3) elif rounds == 'date': fh = TimedRotatingFileHandler(filename, encoding='utf-8', when='d', interval=7, ackupCount=7 ) else: fh = logging.FileHandler(filename,encoding='utf-8') fh.setLevel(fh_level) fh.setFormatter(log_format) logger.addHandler(fh) return logger
my_log = handle_log('TEST','DEBUG','INFO','INFO',r'E:\Python\python 41\working\day19\logs\test.log','size')
my_log.debug('debug级别的日志')
my_log.info('info级别的日志')
my_log.warning('warning级别的日志')
my_log.error('error级别的日志')
本文来自博客园,作者:大头~~,转载请注明原文链接:https://www.cnblogs.com/xiaoying-guo/p/14991217.html