python 日志模块logging的使用场景及示例

1. 简介

日志是在代码中记录消息的过程。使用日志有多种好处,例如调试、性能分析、错误跟踪、运行期间上下文等。Python标准库中的logging模块提供了在程序中记录日志的功能。logging模块可以支持不同的日志级别,并提供多个处理程序以及输出格式。

2. 使用场景

2.1 调试程序

在程序开发和调试过程中,logging模块可以帮助程序员打印在运行期间的变量值和程序状态。在生产环境中,logging模块也可以记录并保存应用程序的异常以及错误信息,便于排查问题。

2.2 分析程序性能

利用logging模块,可以记录程序的启动、关闭、以及各个阶段的运行时间。同时,可以利用Python标准库中的profile和pstats模块实现更加细粒度的性能分析。利用这些分析,可以找到程序的性能瓶颈,并对程序进行优化。

2.3 监控应用运行

利用logging模块,可以记录应用程序的运行状态,例如请求量、并发数等。同时,它还可以将这些日志信息发送到监控工具,并生成警报。这对于大型应用程序来说是非常有用的,可以在不停机的情况下,监控应用程序的健康状态,并及时发现问题。

3. 示例

3.1 基本使用

使用logging模块最基本的方法是先创建一个Logger对象,然后使用不同级别的方法记录日志。Logger对象可以通过配置文件或代码进行配置。

import logging

logging.basicConfig(level=logging.DEBUG,

format='%(asctime)s %(levelname)s %(message)s',

filename='example.log',

filemode='w')

logging.debug('This message should be logged')

logging.info('So should this')

logging.warning('And this, too')

上面代码中,基本配置创建了一个filename为example.log的文件,在文件中记录各个级别的日志信息。在文件example.log中,记录了如下内容:

2021-03-21 18:23:18,356 DEBUG This message should be logged

2021-03-21 18:23:18,357 INFO So should this

2021-03-21 18:23:18,357 WARNING And this, too

3.2 各种日志级别

logging模块提供了最基本的五种日志级别:DEBUG、INFO、WARNING、ERROR和CRITICAL。根据消息的重要性和紧急程度,可以选择不同的级别记录日志信息。默认情况下,设置了WARNING级别的日志记录:

import logging

logging.warning('This is a warning!')

在程序运行期间,输出如下信息:

This is a warning!

3.3 日志处理器

在使用logging模块进行日志记录时,会产生大量的日志信息。为了方便管理这些信息,可以将日志信息输出到不同的处理器中。处理器可以将日志输出到文件、终端或网络中。

import logging

from logging.handlers import RotatingFileHandler

logger = logging.getLogger(__name__)

logger.setLevel(logging.DEBUG)

handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=1)

handler.setLevel(logging.DEBUG)

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

handler.setFormatter(formatter)

logger.addHandler(handler)

logger.debug('This is a debug message')

上面代码中,创建了一个logger对象,并将其级别设置为DEBUG级别。创建了一个RotatingFileHandler对象,并将其级别设置为DEBUG级别。最后,将handler对象添加到logger中,并打印DEBUG级别的日志信息。

3.4 使用自定义Logger

对于大型应用程序,需要实现多个模块中的日志记录。为了更好的管理日志,可以使用自定义Logger。自定义Logger可以从父Logger对象继承,同时也可以添加自己的处理器和过滤器。

import logging

logger = logging.getLogger('example')

logger.setLevel(logging.DEBUG)

fh = logging.FileHandler('example.log')

fh.setLevel(logging.DEBUG)

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

fh.setFormatter(formatter)

logger.addHandler(fh)

logger.debug('This is a debug message')

上面代码中,创建了一个logger对象example,将其级别设置为DEBUG级别。创建了一个FileHandler对象,将其级别设置为DEBUG级别。最后,将handler对象添加到logger中,并打印DEBUG级别的日志信息。

4.总结

在Python应用程序中,logging模块是一个强大的工具,可以帮助开发者记录程序运行期间的日志。它提供了丰富的功能,例如不同级别的日志记录、日志分析和监控等。开发者可以根据应用程序的实际情况,选择合适的日志级别和处理器记录日志信息。

后端开发标签