1.logging封装代码:
import logging
import settings
class Logger:
isirsta = None
def __init__(self, rootname, file, fmt, encoding, debug):
self.rootname = rootname
self.file = file
self.fmt = fmt
self.encoding = encoding
self.debug = debug
def __new__(cls, *args, **kwargs):
"""
实现简单的单例模式
:param args:
:param kwargs:
:return:
"""
if not cls.isirsta:
cls.isirsta = super().__new__(cls)
return cls.isirsta
return cls.isirsta
def logger_log(self):
# 调试模式
if self.debug:
filelevel = logging.DEBUG
consolelevel = logging.DEBUG
else:
filelevel = logging.WARNING
consolelevel = logging.INFO
# 设置等级
loggers = logging.getLogger(self.rootname)
loggers.setLevel(logging.DEBUG)
# 创建日志处理器
file = logging.FileHandler(filename=self.file, encoding=self.encoding)
file.setLevel(filelevel) # 设置写入文件的日志等级
console = logging.StreamHandler()
console.setLevel(consolelevel) # 设置控制台输出日志的等级
# 3. 创建格式化器
fmts = logging.Formatter(fmt=self.fmt)
# 4. 把格式化器添加到日志处理器上
file.setFormatter(fmts)
console.setFormatter(fmts)
# 5. 把日志处理器添加到日志器
loggers.addHandler(file)
loggers.addHandler(console)
return loggers
logger = Logger(**settings.LOGER_DATA).logger_log()
2.settings配置文件配置内容
# 日志
LOGER_DATA = {
"rootname": "SupTech",
"file": os.path.join(BASE_PATH, 'logs', 'log.log'),
"fmt": "%(levelname)s %(asctime)s [%(filename)s-->line:%(lineno)d]:%(message)s",
"encoding": "utf-8",
"debug": False,
}
3.log.log日志存储文件
- 手动创建一个logs文件夹,在下面手动创建一个log.log的文件
3.使用
4.解释
- 日志模块用的比较频繁,几乎所有接口都会用到,因为我们要打印日志实时查看,所以用单例模式,控制实例产生的数量,达到节约资源的目的,不然的话每个接口内都进行实例化logger,会很占资源
- 调试模式,通过settings里面的实参True和False控制,False为关闭调试模式,打印日志时,只有warning等级的日志才会写入log.log文件,True为打开调试模式,只要执行,所有等级的日志都会写入日志文件