一、Python 日志系统设计之不同级别的系统日志
设置基本的日志模块
日志记录器,日志容器,日志文件处理器,日志轮转以及日志的不同级别调用
以下是具体代码实现过程和代码具体的注释说明
""""""
import logging
import os
import datetime
from logging.handlers import RotatingFileHandlerclass 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 filesself.file_handle = logging.FileHandler(log_name, 'a', encoding='utf-8')# 实现日志文件的轮转self.file_handle = RotatingFileHandler(log_name, maxBytes=10000, backupCount=5)# 这里可以设置日志等级,INFO,WARNING,DEBUG,ERRORself.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.logger1def close_handle(self):#从当前日志记录器中移除所有已有的处理器self.logger1.removeHandler(self.file_handle)#移除文件处理器self.file_handle.close()def main_test():logger = UserLog().get_log()#加载info信息logger.info("这是一个信息日志")#加载warninglogger.warning("这是一个警告日志")#加载errorlogger.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
,用于创建和配置日志记录器,并提供了在不同级别记录日志的功能。同时,通过归档设置和格式设置,对日志的存储和展示进行了定制化处理。