欢迎访问宙启技术站
智能推送

实现Python日志记录的 实践:setup_logger()函数解析

发布时间:2024-01-04 06:38:13

实现Python日志记录的 实践主要包括定义日志记录级别、格式化输出和将日志记录写入文件等步骤。以下是一个名为setup_logger()的函数,用于设置日志记录的各个方面,并附带使用示例。

import logging


def setup_logger(log_file='log.txt', log_level=logging.INFO):
    # 创建Logger对象
    logger = logging.getLogger(__name__)
    logger.setLevel(log_level)

    # 创建FileHandler对象,将日志写入文件
    file_handler = logging.FileHandler(log_file)
    file_handler.setLevel(log_level)

    # 创建StreamHandler对象,将日志打印到控制台
    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(log_level)

    # 设置日志的格式化输出
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(formatter)
    stream_handler.setFormatter(formatter)

    # 将FileHandler和StreamHandler添加到Logger对象中
    logger.addHandler(file_handler)
    logger.addHandler(stream_handler)

    return logger


if __name__ == '__main__':
    # 使用示例
    logger = setup_logger(log_file='my_log.txt', log_level=logging.DEBUG)

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

上述代码中的setup_logger()函数有两个可选参数:log_filelog_levellog_file用于指定日志文件的路径和名称,默认为log.txtlog_level用于设置日志的记录级别,默认为logging.INFO

setup_logger()函数内部,我们首先创建一个Logger对象,并指定日志记录级别为传入的log_level。然后,我们创建一个FileHandler对象和一个StreamHandler对象,帮助我们将日志记录分别写入文件和打印到控制台。这两个对象的记录级别也设为传入的log_level

接下来,我们定义了日志记录的格式化输出方式。在上述示例中,我们使用了一个简单的格式化字符串包含时间戳、日志名称、日志级别和日志消息。

最后,我们将FileHandlerStreamHandler对象添加到Logger对象中,然后返回该Logger对象。这样,我们就可以在其他地方使用该Logger对象来记录日志。

在示例代码的if __name__ == '__main__'部分,我们首先调用setup_logger()函数来获取名为loggerLogger对象,这里我们指定日志文件名称为my_log.txt,记录级别为logging.DEBUG

然后,我们使用logger对象记录一条调试消息、一条信息消息、一条警告消息、一条错误消息和一条严重消息。根据传递给setup_logger()函数的记录级别,日志文件和控制台将只显示等于或高于该级别的消息。

通过使用setup_logger()函数,我们可以轻松地设置日志记录的级别、格式和输出方式,并且灵活地适应不同的需求。