【Python logging使用记录】


日志记录是一项重要的应用程序开发任务,它可以帮助开发人员了解应用程序的运行情况、发现错误和警告等信息。Python 为此提供了一个名为 logging 的强大模块,可以用于记录日志和管理日志。

在本文中,我们将介绍 Python logging 模块的一些基本用法、重要概念以及如何在 Python 应用程序中使用它。

简介

Python logging 模块是用于创建、记录和存储应用程序日志的标准库。它提供了一种灵活而强大的方法,可在应用程序中记录各种类型的信息,例如错误、警告、调试、信息等。

logging 模块具有以下特性:

支持多个日志记录器(logger)。
支持多个日志处理器(handler),每个处理器可以将记录写入不同的目标,例如控制台、文件、网络等。
支持日志记录的级别(level)控制,从而可以选择性地记录不同级别的信息。
支持日志记录的格式化(formatter),可以在日志消息中添加时间、模块信息、线程信息等。

基本用法

下面是一个使用 Python logging 模块记录应用程序日志的简单示例:

import logging

# 创建 logger 对象
logger = logging.getLogger(__name__)

# 设置 logger 等级
logger.setLevel(logging.INFO)

# 创建控制台输出句柄
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 创建文件输出句柄
file_handler = logging.FileHandler('myapp.log')
file_handler.setLevel(logging.WARNING)

# 设置输出格式
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加输出句柄到 logger 对象
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 记录日志信息
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

上述示例代码中,我们用 logging.getLogger() 方法创建了一个名为 name 的 logger 对象。logger 对象是 Python logging 模块的核心,负责生成和发送日志记录消息。使用 logger.setLevel() 方法设置了 logger 对象的日志记录级别为 logging.INFO,这意味着只有等级为 INFO 和更高的消息才会被记录。

然后,我们创建了两个日志处理器,一个是控制台输出,一个是文件输出。使用 setLevel() 方法设置了控制台输出的日志级别为 logging.INFO,文件输出的日志级别为 logging.WARNING。在这种情况下,只有等级为 WARNING 和更高的消息才会记录到文件中。

通过 logging.Formatter() 方法创建了一个日志输出格式,这里使用了一个简单的格式字符串,其中 %(格式化字符串操作符)会被日志记录消息的不同部分替换。然后将每个句柄设置为相应格式。

最后,我们向日志记录器中添加处理器(输出目标),并使用 logger.debug(), logger.info(), logger.warning(), logger.error() 和 logger.critical() 方法记录日志信息。

日志级别

Python logging 模块提供了多种日志记录级别,开发人员可以选择记录适当的级别以获取所需的日志详细信息。下面是 Python logging 模块支持的日志记录级别:

DEBUG:详细信息,通常用于调试。
INFO:生成程序正常运行的信息,例如启动消息或连接成功。
WARNING:表示警告消息,用于指出可能出现异常的情况。
ERROR:指出程序运行时出现错误,消息将包含错误信息。
CRITICAL:表示整个程序可能无法继续运行的严重错误。
默认情况下,日志级别为 WARNING,这意味着只有等级为 WARNING 或更高的日志消息才会记录。如果想要修改日志级别,可以使用 logger.setLevel() 方法。

日志记录器

在 Python logging 模块中,日志记录器是生成和发送日志记录消息的核心组件之一。记录器是一个带有名称的对象,它可用于将消息分配给各个处理器(输出目标)。

在 Python 中,可以使用 logging.getLogger() 方法创建新的日志记录器对象。默认情况下,如果使用相同名称创建多个日志记录器对象,则只创建一个记录器。如果您希望每个模块使用单独的日志记录器,则可以使用模块名称创建记录器。

下面是一个使用日志记录器的示例代码:

import logging

logger = logging.getLogger('myapp.module1')

def main():
    logger.info('start function')

if __name__ == "__main__":
    main()

在上述代码中,我们使用模块名称创建了一个名为myapp.module1的日志记录器对象。这样,当记录来自该模块的日志记录时,可以使用该记录器处理器记录日志消息。

日志处理器

日志处理器是 Python logging 模块的另一个重要组件。处理器将日志消息发送到各种输出目标,例如控制台、文件、网络等。Python logging 模块包括以下处理器:

1、StreamHandler:将日志消息发送到流(STDOUT 或 STDERR)。
2、FileHandler:将日志消息写入文件。
3、NullHandler:忽略所有日志消息,通常用于禁用日志记录。
4、SMTPHandler:将日志消息发送到指定的电子邮件地址。
可以使用 setLevel() 方法将不同级别的日志消息发送到不同的处理器。可以使用 addHandler() 方法将处理器对象添加到日志记录器对象中。

下面是一个将日志消息记录到文件的示例代码:

import logging

# 创建 logger 对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# 创建文件输出处理器
handler = logging.FileHandler('myapp.log')
handler.setLevel(logging.INFO)

# 创建输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)

# 添加文件输出处理器到记录器对象
logger.addHandler(handler)

# 记录日志信息
logger.info('Info level message')
logger.debug('Debug level message')

在上面的代码中,我们使用 FileHandler 处理器将日志记录到名为 myapp.log 的文件中。在此之前,我们创建了一个格式器,以指定日志记录的格式。最后,我们添加输出处理器到记录器对象,然后记录日志信息。

日志记录格式

记录格式是 Python logging 模块的重要特性之一,它提供了各种方法来自定义日志记录的格式。可以在日志记录中包含时间戳、日志级别、模块名称、文件名、线程信息等。

在 Python logging 模块中,可以使用 Formatter 类来定义日志记录格式。可以在 Formatter 的构造函数中指定自定义格式字符串,并将其应用于相应的处理器或记录器。

下面是一个使用自定义日志格式的示例代码:

import logging

# 创建 logger 对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# 创建控制台输出处理器
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)

# 创建输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)s [%(module)s:%(filename)s:%(lineno)d] %(message)s')
handler.setFormatter(formatter)

# 添加处理器到记录器对象
logger.addHandler(handler)

# 记录日志信息
logger.info('Info level message')
logger.warning('Warning level message')
logger.error('Error level message')

在上面的代码中,我们使用自定义格式字符串来指定日志记录格式。格式字符串包括时间戳、日志级别、模块名称、文件名和行号。‘

总结

Python logging 模块提供了一种灵活而强大的方法来记录和管理应用程序日志。通过使用日志记录器、处理器和格式化设置,开发人员可以轻松记录应用程序的各个方面,以便及时发现和解决任何出现的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值