Python logging库记录日志

本文详细介绍了Python的logging库,包括日志级别分类(CRITICAL、ERROR、WARNING、INFO、DEBUG)、如何创建和配置日志记录器、处理器以及格式器,以及通过示例展示了如何在实际应用中使用这些功能。
摘要由CSDN通过智能技术生成

Python的logging库提供了一个完整且灵活的日志系统。通过使用logging,可以记录应用程序中发生的事件,帮助调试程序、了解程序运行情况、或在程序部署后监视其行为。

日志级别

logging模块中,日志消息分为不同的级别,这些级别从上到下表示信息的严重性或重要性逐渐降低:

  • CRITICAL:严重错误,需要立刻处理的错误。
  • ERROR:运行时出现的错误,但程序可能还能继续运行。
  • WARNING:潜在的问题或不寻常的情况,但不一定会影响程序的执行。
  • INFO:记录程序运行的重要信息,如用户登录、操作等。
  • DEBUG:详细的调试信息,用于在开发过程中查找问题。
  • NOTSET:特殊的级别,表示所有消息都将被记录。

日志记录器(Logger)

记录器是logging模块中的核心组件,它负责处理日志消息。每个记录器都有一个名字,通常是对应的模块名或应用名。可以为不同的模块或功能创建多个记录器,并通过名字来获取和配置它们。

处理器(Handler)

处理器决定了日志消息应该发送到什么地方。logging模块提供了多种内置处理器,如StreamHandler(将日志消息发送到标准输出或文件),FileHandler(将日志消息写入到文件),SMTPHandler(通过电子邮件发送日志消息)等。

格式器(Formatter)

格式器用于指定日志消息的显示格式。你可以通过配置格式器来决定日志消息的布局,包括时间戳、日志级别、消息内容等。

示例1:

import logging  
import logging.config  
  
# 配置日志  
logging.basicConfig(  
    level=logging.DEBUG,  # 设置记录器的日志级别为DEBUG  
    format='%(asctime)s - %(levelname)s - %(message)s',  # 设置日志消息的格式  
    handlers=[  # 配置处理器  
        logging.StreamHandler(),  # 添加到控制台的处理器  
        logging.FileHandler('app.log')  # 添加到文件的处理器  
    ]  
)  
  
# 创建一个名为'my_app'的记录器  
logger = logging.getLogger('my_app')  
  
# 记录不同级别的日志  
'''
*
日志消息是否被记录取决于记录器(logger)的级别设置和处理器(handler)的级别设置。
记录器的级别(logger level):决定了该记录器会处理哪些级别的日志消息。如果记录器的级别设置为DEBUG,那么DEBUG级别及以上的所有消息都会被处理;如果设置为INFO,则只有INFO、WARNING、ERROR和CRITICAL级别的消息会被处理,DEBUG级别的消息将被忽略,以此类推。
处理器的级别(handler level):类似地,处理器也有自己的级别设置,它决定了处理器会处理哪些通过记录器级别检查的日志消息。即使记录器允许某个级别的消息通过,如果处理器的级别设置得更高,那么低于处理器级别的消息将不会被该处理器处理。
'''
logger.debug('Debug message')  # DEBUG级别以上的消息会被记录  
logger.info('Info message')    # INFO级别以上的消息会被记录  
logger.warning('Warning message')  # WARNING级别以上的消息会被记录  
logger.error('Error message')  # ERROR级别以上的消息会被记录  
logger.critical('Critical message')  # CRITICAL级别以上的消息会被记录
 

示例2:

import logging  
  
# 配置日志  
logging.basicConfig(  
    level=logging.DEBUG,  # 设置记录器的日志级别为DEBUG  
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # 设置日志消息的格式,添加了记录器名称  
    handlers=[  # 配置处理器  
        logging.StreamHandler(),  # 添加到控制台的处理器  
        logging.FileHandler('app.log')  # 添加到文件的处理器  
    ]  
)  
  
# 创建一个名为'my_app'的记录器  
logger = logging.getLogger('my_app')  
  
# 模拟一个简单的应用操作,并记录日志  
def perform_operation(operation):  
    if operation == 'divide':  
        try:  
            result = 10 / 0  # 故意触发一个ZeroDivisionError异常  
        except ZeroDivisionError:  
            logger.error('Error: Division by zero occurred!')  
    elif operation == 'multiply':  
        result = 10 * 5  
        logger.info('Success: Multiplication result is {}'.format(result))  
    else:  
        logger.warning('Warning: Unknown operation {}'.format(operation))  
  
# 执行一些操作并记录日志  
perform_operation('divide')  
perform_operation('multiply')  
perform_operation('subtract')  
  
# 记录一个调试信息  
logger.debug('Debug: This is a debug message')  
  
# 记录一个临界信息  
logger.critical('Critical: This is a critical message')

输出:

2024-03-17 08:28:22,531 - my_app - ERROR - Error: Division by zero occurred!
2024-03-17 08:28:22,544 - my_app - INFO - Success: Multiplication result is 50
2024-03-17 08:28:22,544 - my_app - WARNING - Warning: Unknown operation subtract
2024-03-17 08:28:22,545 - my_app - DEBUG - Debug: This is a debug message
2024-03-17 08:28:22,646 - my_app - CRITICAL - Critical: This is a critical message

app.log文件输出内容与控制台输出相同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值