Python日志实用模板

        本节内容主要介绍日志系统,并设计一个实用模板,随时供其他python程序调用,告别使用print的模式。

1. 日志基本介绍

        在现代软件开发中,日志系统扮演着至关重要的角色。它不仅是排查问题的“显微镜”,更是系统运行的“黑匣子”。根据Stack Overflow 2024开发者调查,超过89%的开发者认为日志是日常开发中最常用的调试工具。

        日志(Logging)是一种记录软件运行状态的机制,通过在代码关键位置插入日志语句,可以实时追踪程序执行流程。Python内置的logging模块提供了完整的日志解决方案,支持从简单输出到复杂结构化日志的全场景需求。日志系统的核心组件包括:

        (1)Logger:日志记录器,应用代码直接调用的接口

        (2)Handler:输出渠道,支持控制台、文件、邮件等

        (3)Formatter:日志格式定义,支持时间、级别、代码位置等元数据,可以显示文件名称及报错的具体位置。

        (4)Filter:日志过滤规则,实现选择性记录

2. 日志的核心作用

        2.1. 调试利器

        当程序出现非预期行为时,通过日志可以快速定位问题发生的上下文。例如:

def divide(a, b):
    logger.debug(f"divide({a}, {b}) called")
    if b == 0:
        logger.error("Divide by zero error")
        raise ValueError
    return a / b

        2.2. 运行监控

        在生产环境中,日志可用于监控系统负载和资源使用情况:

logger.info(f"Processed {request_count} requests in {elapsed_time}s")

        2.3. 安全监测

        关键操作记录是系统安全的重要防线:

logger.warning(f"User {user_id} attempted login with incorrect password")

        2.4. 性能分析

        通过日志统计各模块执行时间:

start_time = time.time()
# ...业务逻辑...
logger.debug(f"Module A execution time: {time.time()-start_time:.2f}s")

3 实用模板

        下面将通过一个增强型日志模块示例,演示如何构建功能完备的日志系统。完整代码如下。我们只需要将下面内容保存为python文件后直接调用。

        3.1. 模板源码

import logging
from colorama import Fore, Style, init

# 初始化 colorama,确保 Windows 终端支持 ANSI 转义序列
init(autoreset=True)

# 定义颜色代码
class ColoredFormatter(logging.Formatter):
    # 使用 colorama 提供的颜色
    COLOR_CODES = {
        'DEBUG': Fore.BLUE,       # 蓝色
        'INFO': Fore.GREEN,       # 绿色
        'WARNING': Fore.YELLOW,   # 黄色
        'ERROR': Fore.RED,        # 红色
        'CRITICAL': Fore.MAGENTA, # 紫红色
    }

    def format(self, record):
        # 获取日志级别的颜色
        log_color = self.COLOR_CODES.get(record.levelname, '')
        # 格式化消息并添加颜色
        log_message = super().format(record)
        return f"{log_color}{log_message}{Style.RESET_ALL}"

def get_logger(filename='', mode='w'):
    # 创建日志器
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)

    # 定义控制台日志格式
    console_formatter = ColoredFormatter('%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s')
    console_handler.setFormatter(console_formatter)
    # 添加处理器到日志器
    logger.addHandler(console_handler)

    if len(filename) > 0:
        # 创建文件处理器
        file_handler = logging.FileHandler(filename, encoding='utf-8', mode=mode)
        file_handler.setLevel(logging.DEBUG)

        # 定义文件日志格式(不带颜色)
        file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s')
        file_handler.setFormatter(file_formatter)
        logger.addHandler(file_handler)
    return logger

if __name__ == '__main__':   
    logger = get_logger('app.log', 'a')
    # 测试日志
    logger.debug('这是调试消息')
    logger.info('这是信息消息')
    logger.warning('这是警告消息')
    logger.error('这是错误消息')
    logger.critical('这是严重错误消息')

        3.2. 调用示例

        假设上面程序已保存为logs.py文件,那么调用方法如下:

from logg import get_logger  # 假设保存为logg.py

# 初始化日志器
logger = get_logger('app.log', 'a')

# 记录不同级别的日志
logger.debug('调试信息')
logger.info('普通信息')
logger.warning('警告信息')
logger.error('错误信息')
logger.critical('严重错误')

4. 输出效果

        在日志配置中,setLevel 方法用于设置日志器(Logger)或处理器(Handler)的最低日志级别,只有高于或等于该级别的日志才会被记录。例如:

logger.setLevel(logging.DEBUG)  # 记录所有级别的日志
console_handler.setLevel(logging.WARNING)  # 控制台仅输出 WARNING 及以上级别的日志

        (1)Python 的日志级别从低到高依次为:

        (2)DEBUG:详细的调试信息,通常用于开发阶段

        (3)INFO:一般运行信息,例如程序启动或配置加载

        (4)WARNING:警告信息,表明可能存在问题,但程序仍能继续运行

        (5)ERROR:错误信息,表示程序遇到问题,需要修复

        (6)CRITICAL:严重错误,可能导致程序崩溃

        在实际项目中,合理设置日志级别可以避免记录过多无用日志,提高程序运行效率,同时确保关键日志信息不会被忽略。例如,在开发环境可以设置DEBUG级别以获取详细信息,而在生产环境通常使用WARNING或更高级别,以减少日志量,提高可读性。

        4.1. 控制台输出效果

        运行后控制台将显示带颜色的日志:

        4.2. 文件日志内容

        如果调用时日志文件名为空,那么将不输出日志到文件。模式为w表示每次运行程序将重新创建日志文件。模式为a表示每次运行日志将追加到当前日志文件内。

        app.log日志文件内容如下图所示。

        通过本文的介绍,我们学习了Python日志系统的基本概念、核心作用,并提供了一个增强型日志模块模板,方便在实际开发中直接使用。一个良好的日志系统不仅能帮助开发者高效调试,还能在生产环境中提供关键的运行监控和安全保障。

        建议在实际项目中,根据具体需求调整日志级别、存储方式以及格式,确保日志既能完整记录关键信息,又不会影响程序性能。希望本文提供的模板能助你快速构建稳定可靠的日志系统,为你的Python开发工作带来更高效的调试体验。

        更多 Python 与 C++ 技巧、AI 大模型、计算机视觉基础到实践、三维算法、深度学习算法等完整指南与总结分享,欢迎关注我的博客:https://blog.youkuaiyun.com/suiyingy,或公众号“乐乐感知学堂”。此外,推荐专业书籍《人工智能点云处理及深度学习算法》,助你深入探索 Python 在三维领域的应用,期待交流与讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值