一、logging模块简介及快速使用
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。
优点:
logging快速使用
#1. 导入Logging包
import logging
#2. 设置配置信息
logging.basicConfig(level=logging.INFO,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s')
#3. 定义日志名称getlogger
logger = logging.getLogger("log_demo")
#4. info,debug
logger.info("info")
logger.debug("debug")
logger.warning("warning")
二、logging模块基本使用
日志输出文件
import logging
#1. 设置logger名称
logger = logging.getLogger("log_file_demo")
#2. 设置log级别logger.setLevel(logging.INFO)
#3. 创建handler
fh_stream = logging.StreamHandler()
# 写入文件
fh_file = logging.FileHandler("./test.log")
#4. 设置日志级别
fh_stream.setLevel(logging.DEBUG)
fh_file.setLevel(logging.WARNING)
#5. 定义输出格式
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s ')
fh_stream.setFormatter(formatter)
fh_file.setFormatter(formatter)
#6. 添加handler
logger.addHandler(fh_stream)
logger.addHandler(fh_file)
#7. 运行输出
logger.info("This is a info")
logger.debug("This is a debug")
logger.warning("This is a warning")
三、将日志进行封装
import logging
from config import Conf
import datetime,os
from config.Conf import ConfigYaml
#定义日志级别的映射
log_l = {
"info": logging.INFO,
"debug": logging.DEBUG,
"warning": logging.WARNING,
"error": logging.ERROR }
#1. 创建类
class Logger:
#2. 定义参数
#输出文件名称,Loggername,日志级别
def __init__(self,log_file,log_name,log_level):
self.log_file = log_file #扩展名 配置文件
self.log_name = log_name #参数
self.log_level = log_level #配置文件
#3. 编写输出控制台或文件
# 设置logger名称
self.logger = logging.getLogger(self.log_name)
# 设置log级别
self.logger.setLevel(log_l[self.log_level]) #logging.INFO
#判断handlers是否存在
if not self.logger.handlers:
# 输出控制台
fh_stream = logging.StreamHandler()
fh_stream.setLevel(log_l[self.log_level])
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s ')
fh_stream.setFormatter(formatter)
# 写入文件
fh_file = logging.FileHandler(self.log_file)
fh_file.setLevel(log_l[self.log_level])
fh_file.setFormatter(formatter)
# 添加handler
self.logger.addHandler(fh_stream)
self.logger.addHandler(fh_file)
#4. 初始化参数数据
#日志文件名称,日志文件级别
#日志文件名称 = logs目录 + 当前时间+扩展名
#log目录
log_path = Conf.get_log_path()
#当前时间
current_time = datetime.datetime.now().strftime("%Y-%m-%d")
#扩展名
log_extension = ConfigYaml().get_conf_log_extension()
logfile = os.path.join(log_path,current_time+log_extension)
#print(logfile)
#日志文件级别
loglevel = ConfigYaml().get_conf_log()
#print(loglevel)
#5. 对外方法,初始log工具类,提供其它类使用
def my_log(log_name = __file__):
return Logger(log_file=logfile,log_name=log_name,log_level=loglevel).logger
if __name__ == "__main__":
my_log().debug("This is a debug")