一、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,用于创建和配置日志记录器,并提供了在不同级别记录日志的功能。同时,通过归档设置和格式设置,对日志的存储和展示进行了定制化处理。

相关推荐

  1. Python 日志系统设计不同级别系统

    2024-07-11 17:54:06       21 阅读
  2. 二、Python日志系统watchDog监控

    2024-07-11 17:54:06       22 阅读
  3. springboot+日志系统

    2024-07-11 17:54:06       38 阅读
  4. 查看 iOS 系统日志或崩溃

    2024-07-11 17:54:06       50 阅读
  5. Doris 系统日志和审计

    2024-07-11 17:54:06       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 17:54:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 17:54:06       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 17:54:06       58 阅读
  4. Python语言-面向对象

    2024-07-11 17:54:06       69 阅读

热门阅读

  1. SpringAMQP收发消息demo

    2024-07-11 17:54:06       21 阅读
  2. SpringSecurity中文文档(Servlet OAuth 2.0 Login)

    2024-07-11 17:54:06       19 阅读
  3. ant-design-vue表格设置某列标题部分文字颜色

    2024-07-11 17:54:06       24 阅读
  4. python-redis-lock是如何实现锁自动续期的

    2024-07-11 17:54:06       22 阅读
  5. APK反编译

    2024-07-11 17:54:06       25 阅读
  6. ubuntu 上配置开机自动启动ssh

    2024-07-11 17:54:06       17 阅读
  7. 无线电术语

    2024-07-11 17:54:06       24 阅读
  8. RDD 专项练习

    2024-07-11 17:54:06       22 阅读
  9. 何为vue脚手架?

    2024-07-11 17:54:06       25 阅读
  10. 桥接模式案例

    2024-07-11 17:54:06       23 阅读