好久没有使用日志模块了,便于理解,重新拾起
跟我一起回顾下python的logging模块吧~
一、日志的使用特性
设置日志等级 ,高低顺序:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
1、logging 默认的输入等级是warning
import logging
# 默认的输入等级是warning
age = 5
logging.debug("debug mesg is %d"%age)
logging.info("info mesg is {}".format(age))
logging.warning(f"warning mesg is {age}")
# output:
WARNING:root:warning mesg
2、logging.basicConfig设置特定的等级、 时间格式
fmt = "%(name)s--->%(message)s--->%(asctime)s"
logging.basicConfig(level="DEBUG",format=fmt)
# output:
从debug开始输出,output:DEBUG:root:debug mesg 输出3个
root--->debug mesg--->2022-05-06 19:49:38,395
二、配置日志
1、创建日志对象
创建一个logger,没有指定name,返回root logger;name相同,返回logger实例都是同一个且只有一个;
即logger实例与name是一一对应,无需logger实例进行传递,只要知道name即可
import logging
#创建日志
logger = logging.getLogger('mylogger')
2、创建控制台日志处理器
handlers处理器,将日志分发到不同的目的地,可以是文件,邮件,或者通过http等协议发送到任何地方
# 打印窗口日志
cons_handler = logging.StreamHandler()
cons_handler.setLevel(level="ERROR")
# 日志器添加控制台处理器
logger.addHandler(console_handler)
logger.info("开始记录日志")
3、创建文件日志处理器,将日志输入到日志文件中
logfile = os.path.join(LOG_PATH, "{}.log".format(time.strftime("%Y%m%d")))
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler(logfile,node='a',encoding="UTF-8")
# 同控制台
fh.setLevel(level="ERROR")
logger.addHandler(fh)
4、定义handler的输出格式
ft = logging.Formatter,init(fmt=None,datefmt=None,style=' %')
fh_fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
formatter = logging.Formatter(fmt = fh_fmt)
5、输出日志
logger.info("开始记录日志")
三、配置日志封装
import logging
class Log():
def __init__(self,level="DEBUG"):
# 初始化,创建日志
self.log = logging.getLogger("tlylog")
self.log.setLevel(level)
def file_handle(self,level="DEBUG"):
# 创建文件处理器
fh = logging.FileHandler(filename,node="a",encoding="UTF-8")
# 设置等级,格式
fh.setLevel(level)
fh.setFormatter(self.get_formatter()[0])
return fh
def cons_handle(self,level="DEBUG"):
# 创建cmd窗口处理器
cons = logging.StreamHandler()
cons.setLevel(level)
cons.setFormatter(self.get_formatter()[0])
return cons
def get_formatter(self):
# 分别设置文件或窗口的日志打印格式
fh_fmt = fh.setFormatter(fmt = "%(levelname)s-->%(asctime)s-->%(message)s")
cons_fmt = cons.setFormatter(fmt = "%(levelname)s-->%(asctime)s-->%(message)s")
return fh_fmt,cons_fmt
def get_log(self):
# 分别将处理器添加到日志器中
self.log.addHandler(self.file_handle())
self.log.addHandler(self.cons_handle())
# 返回日志实例对象
return self.log
#log = Log()
#logger = log.get_log()
#logger.info("first mesg")
# 测试用例如何调用日志
from base.log import Log
class Test():
def __init__(self):
log = Log()
self.logger = log.get_log()
def test1(self):
self.logger.info("开始执行")
self.logger.infi("执行结束")
网友评论