python 日志 logging 模块详解

1. 什么是日志 logging

日志是在软件开发过程中记录程序运行状态的一种重要方式。Python 的 logging 模块提供了一种灵活而可配置的日志记录工具,可以用于替代 print 语句来输出日志信息。logging 模块可以将日志信息分级,并将其输出到不同的目标,如控制台、文件、网络等。

2. logging 模块的基本使用

下面是 logging 模块的基本使用方法:

2.1 创建日志记录器

首先,我们需要创建一个 Logger 对象来进行日志记录。可以通过 getLogger() 方法创建一个 Logger 对象,参数中传入一个名称:

import logging

logger = logging.getLogger('my_logger')

使用 getLogger() 方法创建一个 Logger 对象后,可以通过设置其日志级别来控制输出的日志级别。常用的日志级别有 DEBUG、INFO、WARNING、ERROR 和 CRITICAL。默认的日志级别是 WARNING,即只会输出级别大于等于 WARNING 的日志信息。

logger.setLevel(logging.DEBUG)

2.2 创建日志处理器

Logger 对象创建后,我们需要创建一个或多个日志处理器,用于决定日志信息的输出位置。常见的日志处理器有 StreamHandler、FileHandler 和 RotatingFileHandler。

2.2.1 StreamHandler

StreamHandler 用于将日志信息输出到控制台:

stream_handler = logging.StreamHandler()

logger.addHandler(stream_handler)

2.2.2 FileHandler

FileHandler 用于将日志信息输出到文件:

file_handler = logging.FileHandler('my.log')

logger.addHandler(file_handler)

3. 设置日志格式

日志格式是控制日志输出时的显示方式。我们可以通过设置 Formatter 对象来定义日志的显示格式:

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

stream_handler.setFormatter(formatter)

file_handler.setFormatter(formatter)

上面的日志格式中,%(asctime)s 表示日志记录的时间,%(levelname)s 表示日志级别,%(message)s 表示日志内容。

4. 日志级别的设置

Logger 对象、日志处理器以及日志记录器,都可以单独设置日志级别。如果 Logger 对象的日志级别被设置为 DEBUG,那么所有级别大于等于 DEBUG 的日志信息都会被输出。

5. 使用 logging 进行详细调试

使用 print 语句进行调试的时候,往往需要手动添加并删除。而使用 logging 模块则可以轻松实现详细调试。下面是一个使用 logging 进行详细调试的示例:

import logging

logger = logging.getLogger('my_logger')

logger.setLevel(logging.DEBUG)

stream_handler = logging.StreamHandler()

logger.addHandler(stream_handler)

formatter = logging.Formatter('%(levelname)s - %(message)s')

stream_handler.setFormatter(formatter)

def divide(x, y):

logger.debug('dividing {} by {}'.format(x, y))

try:

result = x / y

logger.debug('result: {}'.format(result))

except ZeroDivisionError as e:

logger.error('division by zero: {}'.format(e))

raise

divide(10, 2)

divide(10, 0)

上面的示例中,我们使用了 getLogger() 方法创建了一个 Logger 对象,并设置了日志级别为 DEBUG。然后,创建了一个 StreamHandler 对象,并将其添加到 Logger 对象中。接着,设置了日志的显示格式。最后,我们定义了一个 divide() 函数,在函数中使用 logger.debug() 输出详细的调试信息。最后调用了 divide() 函数来触发日志记录。

6. logging 模块的参数 temperature=0.6

在 logging 模块中没有名为 temperature 的参数,因此无法为其设置值为 0.6。

7. 总结

logging 模块是 Python 中用于记录日志的标准库。通过使用 logging 模块,我们可以更好地管理程序中的日志信息,方便调试和问题定位。本文对 logging 模块进行了详细的介绍,包括创建日志记录器、创建日志处理器、设置日志格式和日志级别的设置等。希望本文对你理解和使用 logging 模块有所帮助。

后端开发标签