Python封装日志类

日志是软件开发中重要的组成部分,它用来记录程序运行时的信息,以便开发人员进行故障排查和错误修复。Python提供了一些内置模块来处理日志,如logginglogger。然而,这些模块的使用可能相对复杂,不太适合初学者或者对日志需求较简单的开发者。为了简化日志的使用,我们可以封装一个简单的日志类,使其易于使用和扩展。

封装日志类

我们可以创建一个Logger类来封装logging模块,实现日志的快速使用。首先,我们需要导入logging模块。

import logging

接下来,我们创建一个名为Logger的类,它包含以下功能:

  • 初始化日志配置
  • 记录日志消息
  • 终端输出日志消息
  • 将日志消息写入文件
class Logger:
    def __init__(self, level=logging.INFO, log_file=None):
        # 初始化日志配置
        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(level)
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
        
        # 终端输出日志
        console_handler = logging.StreamHandler()
        console_handler.setLevel(level)
        console_handler.setFormatter(formatter)
        self.logger.addHandler(console_handler)
        
        # 写入文件
        if log_file:
            file_handler = logging.FileHandler(log_file)
            file_handler.setLevel(level)
            file_handler.setFormatter(formatter)
            self.logger.addHandler(file_handler)

    def info(self, message):
        # 记录info级别日志
        self.logger.info(message)

    def debug(self, message):
        # 记录debug级别日志
        self.logger.debug(message)

    def warning(self, message):
        # 记录warning级别日志
        self.logger.warning(message)

    def error(self, message):
        # 记录error级别日志
        self.logger.error(message)

    def critical(self, message):
        # 记录critical级别日志
        self.logger.critical(message)

使用封装的日志类

使用封装的日志类非常简单。首先,我们创建一个Logger对象。

logger = Logger()

然后,我们就可以使用logger对象来记录日志消息。

logger.info("This is an info message.")
logger.debug("This is a debug message.")
logger.warning("This is a warning message.")
logger.error("This is an error message.")
logger.critical("This is a critical message.")

运行上述代码,我们会在终端上看到相应的日志消息。

2022-01-01 10:00:00 - INFO - This is an info message.
2022-01-01 10:00:01 - WARNING - This is a warning message.
2022-01-01 10:00:02 - ERROR - This is an error message.
2022-01-01 10:00:03 - CRITICAL - This is a critical message.

此外,我们还可以将日志消息写入文件。首先,我们创建一个Logger对象,并指定日志文件路径。

logger = Logger(log_file="log.txt")

然后,我们记录日志消息。

logger.info("This is an info message.")
logger.error("This is an error message.")

运行上述代码后,我们会在log.txt文件中看到相应的日志消息。

扩展日志类

我们可以根据实际需求对日志类进行扩展。例如,我们可以添加一个set_level方法,用于设置日志级别。

class Logger:
    def __init__(self, level=logging.INFO, log_file=None):
        # ...

    def set_level(self, level):
        # 设置日志级别
        self.logger.setLevel(level)

使用扩展后的日志类,我们可以灵活地设置日志级别。

logger = Logger()
logger.info("This is an info message.")
logger.set_level(logging.DEBUG)
logger.debug("This is a debug message.")

总结

封装日志类可以简化日志的使用,让开发者更加专注于程序的开发和调试。通过自定义的Logger类,我们可以快速记录并输出日志消息,还可以将日志消息写入文件。此外,我们还可以根据实际需求对日志类进行扩展,