使用logging模块进行日志记录

在 Python 中,logging 模块可以用来进行日志记录。

logging 模块提供了一个灵活的日志系统,可以输出到控制台或者保存到文件,可以根据不同的级别过滤不同的日志信息。

以下是使用 logging 模块进行日志记录的示例代码:
import logging

# 设置日志级别和输出格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')

# 记录日志
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
在这个示例中,我们首先使用 basicConfig 方法设置日志级别和输出格式。在这个示例中,我们将日志级别设置为 INFO,表示只记录 INFO 级别及以上的日志信息,输出格式设置为 %(asctime)s %(levelname)s %(message)s,表示在每条日志记录中包括时间戳、日志级别和日志消息。

然后我们记录了几条日志,分别使用了不同的日志级别,这些级别按照从低到高的顺序分别是:DEBUG、INFO、WARNING、ERROR 和 CRITICAL。

当运行这个示例时,输出如下:
2023-03-27 07:44:25,532 INFO This is an info message
2023-03-27 07:44:25,532 WARNING This is a warning message
2023-03-27 07:44:25,532 ERROR This is an error message
2023-03-27 07:44:25,532 CRITICAL This is a critical message
可以看到,只有日志级别高于等于 INFO 的日志信息被记录了下来。

除了 basicConfig 方法,logging 模块还提供了很多其他的配置和使用方法,例如可以将日志输出到文件中,可以在日志记录中包含调用栈信息等。在实际使用中,我们可以根据具体的需求来选择合适的配置和使用方法。


除了基本的使用方法外,logging 模块还有以下几个比较常用的功能:

将日志输出到文件中
我们可以使用 FileHandler 来将日志输出到文件中,示例代码如下:
import logging

# 设置日志级别和输出格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')

# 将日志输出到文件中
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.WARNING)
file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))

# 添加文件日志处理器到 logger 中
logger = logging.getLogger()
logger.addHandler(file_handler)

# 记录日志
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
在这个示例中,我们创建了一个 FileHandler 对象,将日志输出到文件 example.log 中。我们可以通过设置 setLevel 方法和 Formatter 对象来指定日志级别和输出格式。

然后,我们将文件日志处理器添加到 logger 中,使用 getLogger 方法获取默认的 logger 对象,并使用 addHandler 方法将文件日志处理器添加到 logger 中。

最后,我们记录了几条日志,这些日志不仅会输出到控制台,也会输出到文件中。

记录调用栈信息
我们可以使用 logging 模块中的 exception 方法来记录调用栈信息,示例代码如下:
import logging

# 设置日志级别和输出格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')

# 记录日志,包含调用栈信息
try:
    a = 1 / 0
except Exception as e:
    logging.exception('Exception occurred')
在这个示例中,我们使用 try-except 代码块捕获了一个异常,并使用 exception 方法记录了异常信息和调用栈信息。

在多个模块中使用相同的 logger
我们可以在不同的模块中使用相同的 logger 对象,以便将日志信息集中到一起。示例代码如下:
# main.py

import logging
import mymodule

# 设置日志级别和输出格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')

# 获取默认的 logger 对象
logger = logging.getLogger()

# 添加文件日志处理器到 logger 中
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.WARNING)
file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
logger.addHandler(file_handler)

# 在主模块中记录日志
logger.info('This is a message from main.py')

# 在 mymodule 模块中记录日志
mymodule.do_something()

# mymodule.py

import logging

# 获取默认的 logger 对象
logger = logging.getLogger(__name__)

def do_something():
    logger.info('This is a message from mymodule.py')
在这个示例中,我们在 main.py 中定义了一个 logger 对象,并添加了一个文件日志处理器。然后,我们在主模块中使用 logger 对象记录了一条日志信息。

同时,在 mymodule.py 模块中,我们也定义了一个 logger 对象,并在该模块中记录了一条日志信息。

由于我们在 mymodule.py 模块中使用了 __name__,这会将模块名作为 logger 的名称,这样我们就可以在多个模块中使用相同的 logger 对象。

使用不同的日志级别记录日志信息
logging 模块中定义了以下几种日志级别:

DEBUG:详细的调试信息
INFO:确认程序按预期运行
WARNING:表示出现非致命的问题或意外情况
ERROR:表示出现了错误,但不至于程序立即停止
CRITICAL:表示出现了严重的错误,程序可能无法继续执行
我们可以根据需要选择不同的日志级别来记录日志信息。示例代码如下:
import logging

# 设置日志级别和输出格式
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s')

# 记录不同级别的日志信息
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
在这个示例中,我们使用 basicConfig 方法设置了日志级别为 DEBUG,并记录了不同级别的日志信息。

这些是 logging 模块的一些常用功能和使用方法。使用 logging 模块记录日志信息可以帮助我们更好地了解程序运行时的情况,发现和解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

中年老码农

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

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

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

打赏作者

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

抵扣说明:

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

余额充值