logging模块-菜鸟教程

目录

简介 

为什么使用 logging?

日志级别

基本用法

1.简单示例

2. 将日志写入文件

高级用法

1. 创建 Logger 对象

2. 同时输出到控制台和文件

3. 捕获异常信息

日志格式化参数

总结


简介 

  logging 模块是 Python 标准库中用于记录日志的强大工具。它可以帮助开发者记录程序运行时的信息,包括调试信息、警告、错误等,从而便于排查问题和监控程序运行状态。

为什么使用 logging

  相比于直接使用 print() 打印信息,logging 提供了以下优势:

  • 分级管理 :可以根据日志的严重程度(如 DEBUG、INFO、WARNING、ERROR、CRITICAL)灵活控制输出。
  • 多输出目标 :可以将日志输出到控制台、文件、网络等多种目标。
  • 格式化输出 :支持自定义日志格式,包含时间戳、日志级别、模块名等信息。
  • 性能优化 :支持延迟记录日志(如仅在特定条件下记录),避免不必要的性能开销。

日志级别

  logging 模块提供了以下几种日志级别(从低到高):

  • DEBUG :调试信息,通常用于开发阶段。
  • INFO :程序正常运行时的信息。
  • WARNING :潜在的问题,但不会影响程序运行。
  • ERROR :程序运行出错,某些功能无法正常工作。
  • CRITICAL :严重错误,可能导致程序崩溃。

     默认的日志级别是 WARNING ,即只有等于或高于 WARNING 级别的日志会被记录。

基本用法

1.简单示例

import logging

# 配置日志的基本设置
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 记录不同级别的日志
logging.debug("这是一个调试信息")
logging.info("这是一个普通信息")
logging.warning("这是一个警告信息")
logging.error("这是一个错误信息")
logging.critical("这是一个严重错误信息")

输出示例:

2023-03-01 12:00:00,123 - DEBUG - 这是一个调试信息
2023-03-01 12:00:00,123 - INFO - 这是一个普通信息
2023-03-01 12:00:00,123 - WARNING - 这是一个警告信息
2023-03-01 12:00:00,123 - ERROR - 这是一个错误信息
2023-03-01 12:00:00,123 - CRITICAL - 这是一个严重错误信息

2. 将日志写入文件

通过 basicConfigfilename 参数,可以将日志输出到文件

import logging

# 配置日志输出到文件
logging.basicConfig(filename='app.log', level=logging.DEBUG, 
                    format='%(asctime)s - %(levelname)s - %(message)s')

logging.debug("这是一个调试信息")
logging.info("这是一个普通信息")
logging.warning("这是一个警告信息")

运行后会在当前目录生成一个 app.log 文件,内容如下:

2023-03-01 12:00:00,123 - DEBUG - 这是一个调试信息
2023-03-01 12:00:00,123 - INFO - 这是一个普通信息
2023-03-01 12:00:00,123 - WARNING - 这是一个警告信息

高级用法

1. 创建 Logger 对象

basicConfig 是一种简单的配置方式,但更灵活的方式是使用 Logger 对象:

import logging

# 创建 Logger 对象
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)  # 设置日志级别

# 创建 Handler,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 创建 Formatter,定义日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)

# 将 Handler 添加到 Logger
logger.addHandler(console_handler)

# 记录日志
logger.debug("这是一个调试信息")
logger.info("这是一个普通信息")
logger.warning("这是一个警告信息")
logger.error("这是一个错误信息")
logger.critical("这是一个严重错误信息")

2. 同时输出到控制台和文件

可以通过添加多个 Handler 实现日志同时输出到控制台和文件:

import logging

# 创建 Logger 对象
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# 创建 Handler,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 创建 Handler,用于输出到文件
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.ERROR)  # 仅记录 ERROR 及以上级别的日志

# 创建 Formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加 Handler
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 记录日志
logger.debug("这是一个调试信息")  # 仅输出到控制台
logger.error("这是一个错误信息")  # 输出到控制台和文件

3. 捕获异常信息

logging 支持捕获异常并记录堆栈信息:

import logging

logging.basicConfig(level=logging.DEBUG)

try:
    1 / 0
except Exception as e:
    logging.error("发生了一个错误", exc_info=True)

输出示例:

ERROR:root:发生了一个错误
Traceback (most recent call last):
  File "example.py", line 6, in <module>
    1 / 0
ZeroDivisionError: division by zero

日志格式化参数

Formatter 支持多种占位符,常用的有:

  • %(asctime)s:日志记录的时间。
  • %(name)s:Logger 的名称。
  • %(levelname)s:日志级别。
  • %(message)s:日志消息。
  • %(filename)s:调用日志记录的文件名。
  • %(lineno)d:调用日志记录的代码行号。
  • %(funcName)s:调用日志记录的函数名。

总结

  logging 模块是 Python 中非常强大的日志工具,适合各种规模的应用程序。通过合理配置日志级别、输出目标和格式,可以有效提升程序的可维护性和可观测性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值