设置基本的日志模块
日志记录器,日志容器,日志文件处理器,日志轮转以及日志的不同级别调用
以下是具体代码实现过程和代码具体的注释说明
""""""
import logging
import os
import datetime
from logging.handlers import RotatingFileHandler
class UserLog(object):
def __init__(self):
# 获取当前日志记录器
self.logger1 = logging.getLogger(__name__)
# 从日志管理器的字典中移除当前模块对应的日志记录器,防止重复
logging.Logger.manager.loggerDict.pop(__name__)
# 将当前日志记录器的处理器列表清空
self.logger1.handlers = []
# 从当前日志记录器中移除所有已有的处理器
self.logger1.removeHandler(self.logger1.handlers)
if not self.logger1.handlers:
self.logger1.setLevel(logging.DEBUG) # 测试环境
# self.logger1.setLevel(logging.WARNING) #生产环境
# 文件名字
base_dir = os.path.dirname(os.path.abspath(__file__))
log_dir = os.path.join(base_dir, "logs")
log_file = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"
log_name = log_dir + "/" + log_file
# 文件输出日志, writes formatted logging records to disk files
self.file_handle = logging.FileHandler(log_name, 'a', encoding='utf-8')
# 实现日志文件的轮转
self.file_handle = RotatingFileHandler(log_name, maxBytes=10000, backupCount=5)
# 这里可以设置日志等级,INFO,WARNING,DEBUG,ERROR
self.file_handle.setLevel(logging.INFO)
# 加上日志时间进行操作
formatter = logging.Formatter(
'%(asctime)s %(filename)s--> %(funcName)s %(levelno)s: %(levelname)s ----->%(message)s')
self.file_handle.setFormatter(formatter)
self.logger1.addHandler(self.file_handle)
def get_log(self):
return self.logger1
def close_handle(self):
#从当前日志记录器中移除所有已有的处理器
self.logger1.removeHandler(self.file_handle)
#移除文件处理器
self.file_handle.close()
def main_test():
logger = UserLog().get_log()
#加载info信息
logger.info("这是一个信息日志")
#加载warning
logger.warning("这是一个警告日志")
#加载error
logger.error("这是一个错误日志")
if __name__ == '__main__':
main_test()
UserLog
类的定义:__init__
方法:- 获取当前模块的日志记录器
logger1
,并通过一些操作确保没有重复的处理器。 - 设置日志记录器的级别,在测试环境设置为
DEBUG
,生产环境可设置为WARNING
。 - 准备日志文件的相关设置,包括确定日志文件夹路径、文件名、文件处理器等。
- 对文件处理器进行了归档设置,如文件大小限制和备份数量。
- 设置了日志的格式,包含时间、文件名、函数名、日志级别编号、日志级别名称和具体消息。
- 将文件处理器添加到日志记录器。
- 获取当前模块的日志记录器
get_log
方法:返回创建好的日志记录器,供外部使用。close_handle
方法:从日志记录器中移除文件处理器,并关闭文件处理器。
main_test
函数:- 获取
UserLog
类创建的日志记录器logger
。 - 分别使用
info
、warning
和error
方法记录不同级别的日志消息。
- 获取
在
__main__
部分,调用main_test
函数执行主要的测试逻辑。
实现一个自定义的日志类 UserLog
,用于创建和配置日志记录器,并提供了在不同级别记录日志的功能。同时,通过归档设置和格式设置,对日志的存储和展示进行了定制化处理。