一、Python 日志系统设计之不同级别的系统日志

设置基本的日志模块

日志记录器,日志容器,日志文件处理器,日志轮转以及日志的不同级别调用

以下是具体代码实现过程和代码具体的注释说明

""""""
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()
  1. UserLog 类的定义:

    • __init__ 方法:
      • 获取当前模块的日志记录器 logger1 ,并通过一些操作确保没有重复的处理器。
      • 设置日志记录器的级别,在测试环境设置为 DEBUG,生产环境可设置为 WARNING
      • 准备日志文件的相关设置,包括确定日志文件夹路径、文件名、文件处理器等。
      • 对文件处理器进行了归档设置,如文件大小限制和备份数量。
      • 设置了日志的格式,包含时间、文件名、函数名、日志级别编号、日志级别名称和具体消息。
      • 将文件处理器添加到日志记录器。
    • get_log 方法:返回创建好的日志记录器,供外部使用。
    • close_handle 方法:从日志记录器中移除文件处理器,并关闭文件处理器。
  2. main_test 函数:

    • 获取 UserLog 类创建的日志记录器 logger
    • 分别使用 infowarningerror 方法记录不同级别的日志消息。
  3. __main__ 部分,调用 main_test 函数执行主要的测试逻辑。

实现一个自定义的日志类 UserLog,用于创建和配置日志记录器,并提供了在不同级别记录日志的功能。同时,通过归档设置和格式设置,对日志的存储和展示进行了定制化处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值