Python学习 -- logging模块

logging 模块是 Python 中用于记录日志的标准库,它提供了丰富的功能,可以帮助开发者进行日志记录和管理。以下是关于logging模块的详细使用方式,包括日志级别、处理流程、Logger 类、Handler 类、Filter 类、Formatter 类以及模块中常用函数等内容。

1. 日志级别

复制代码
logging 模块定义了以下几个日志级别,按照递增的重要性排列:
DEBUG: 最详细的日志信息,通常用于调试目的。
INFO: 用于确认程序正常运行。
WARNING: 表示可能存在问题,但程序仍然正常运行。
ERROR: 用于标识出现错误,程序可能无法正常运行。
CRITICAL: 表示严重的错误,可能导致程序崩溃。

2. 处理流程

创建一个 Logger 对象,用于记录日志。

创建一个或多个 Handler 对象,用于指定日志记录的输出目标(例如文件、控制台等)。

可选地创建一个或多个 Filter 对象,用于过滤需要记录的日志记录。

可选地创建一个 Formatter 对象,用于指定日志记录的格式。

3. Logger 类

Logger 类是主要的日志记录器,用于记录日志消息。

复制代码
import logging
# 创建一个Logger对象
logger = logging.getLogger("my_logger")

4. Handler 类

Handler 类负责将日志消息发送到指定的输出目标。

复制代码
# 创建一个文件处理器
file_handler = logging.FileHandler("my_log.log")
# 创建一个控制台处理器
console_handler = logging.StreamHandler()

5. Filter 类

Filter 类用于过滤特定的日志记录。

复制代码
class MyFilter(logging.Filter):
    def filter(self, record):
        return "important" in record.getMessage()
logger.addFilter(MyFilter())

6. Formatter 类

Formatter 类用于指定日志记录的格式。

复制代码
# 创建一个自定义格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 为处理器设置格式
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

7. 常用函数

logger.setLevel(level)

设置日志记录器的最低日志级别,只有达到该级别的日志才会被记录。

logger.setLevel(logging.DEBUG)

**logger.addHandler(handler)**​

为日志记录器添加处理器,指定日志的输出目标。

复制代码
logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger.debug(msg), logger.info(msg), logger.warning(msg), logger.error(msg), logger.critical(msg)

分别用于记录不同级别的日志消息。

复制代码
logger.debug("This is a debug message.")
logger.info("This is an info message.")
logger.warning("This is a warning message.")
logger.error("This is an error message.")
logger.critical("This is a critical message.")

完整示例

以下是一个完整的示例,演示如何使用 logging 模块进行日志记录:

复制代码
import logging
# 创建一个Logger对象
logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)
# 创建一个文件处理器
file_handler = logging.FileHandler("my_log.log")
# 创建一个控制台处理器
console_handler = logging.StreamHandler()
# 创建一个自定义格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 添加处理器到Logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 创建一个自定义Filter,过滤带有"important"关键字的日志记录
class MyFilter(logging.Filter):
    def filter(self, record):
        return "important" in record.getMessage()
logger.addFilter(MyFilter())
# 记录不同级别的日志
logger.debug("This is a debug message.")
logger.info("This is an info message.")
logger.warning("This is a warning message.")
logger.error("This is an error message.")
logger.critical("This is a critical message.")

这个示例演示了如何创建 Logger、Handler、Filter、Formatter 并使用它们来记录不同级别的日志消息。通过灵活地使用 logging 模块,您可以更好地管理和调试您的应用程序。

相关推荐
Pilot-HJQ3 分钟前
固定 Element UI 表格表头的方法(超简单)
vue.js·学习·css3·html5
2501_9216494910 分钟前
主流金融数据API对比:如何获取精准、及时的IPO数据
开发语言·python·金融·restful
passerma11 分钟前
解决qiankun框架子应用打包后css里的图片加载404失败问题
前端·微前端·qiankun
saoys16 分钟前
Opencv 学习笔记:图像绘制(直线 / 圆 / 椭圆 / 矩形 / 多边形 + 文字添加)
笔记·opencv·学习
君鼎17 分钟前
计算机网络第四章:网络层学习总结
学习·计算机网络
●VON22 分钟前
绿色 AI:让智能计算与地球共生
人工智能·学习·安全·制造·von
Aliex_git23 分钟前
性能优化 - Vue 日常实践优化
前端·javascript·vue.js·笔记·学习·性能优化
栈与堆23 分钟前
LeetCode-88-合并两个有序数组
java·开发语言·数据结构·python·算法·leetcode·rust
董世昌4126 分钟前
添加、删除、替换、插入元素的全方法指南
java·开发语言·前端
超人小子27 分钟前
自动化报表系统实战:用Python让报表工作智能化
运维·python·自动化