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级别的日志')
 
posted @ 2021-07-09 17:04  大头~~  阅读(1599)  评论(0编辑  收藏  举报