菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 3 教程
Python3 教程 Python3 简介 Python3 环境搭建 Python3 VScode Python3 基础语法 Python3 基本数据类型 Python3 数据类型转换 Python3 解释器 Python3 注释 Python3 运算符 Python3 数字(Number) Python3 字符串 Python3 列表 Python3 元组 Python3 字典 Python3 集合 Python3 条件控制 Python3 循环语句 Python3 编程第一步 Python3 推导式 Python3 迭代器与生成器 Python3 with Python3 函数 Python3 lambda Python3 装饰器 Python3 数据结构 Python3 模块 Python __name__ Python3 输入和输出 Python3 File Python3 OS Python3 错误和异常 Python3 面向对象 Python3 命名空间/作用域 Python 虚拟环境的创建 Python 类型注解 Python3 标准库概览 Python3 实例 Python 测验

Python3 高级教程

Python3 正则表达式 Python3 CGI编程 Python3 MySQL(mysql-connector) Python3 MySQL(PyMySQL) Python3 网络编程 Python3 SMTP发送邮件 Python3 多线程 Python3 XML 解析 Python3 JSON Python3 日期和时间 Python3 内置函数 Python3 MongoDB Python3 urllib Python uWSGI 安装配置 Python3 pip Python3 operator Python math Python requests Python random Python OpenAI Python 有用的资源 Python AI 绘画 Python statistics Python hashlib Python 量化 Python pyecharts Python selenium 库 Python 爬虫 Python Scrapy 库 Python Markdown Python sys 模块 Python Pickle 模块 Python subprocess 模块 Python queue 模块 Python StringIO 模块 Python logging 模块 Python datetime 模块 Python re 模块 Python csv 模块 Python threading 模块 Python asyncio 模块 Python PyQt Python for 循环 Python while 循环
(追記) (追記ここまで)

Python logging 模块

在编程中,日志记录(logging)是一种非常重要的工具,它可以帮助我们跟踪程序的运行状态、调试错误以及记录重要信息。

Python 提供了一个内置的 logging 模块,专门用于处理日志记录任务。与简单的 print 语句相比,logging 模块更加灵活和强大,能够满足不同场景下的日志需求。

为什么使用 logging 模块?

  1. 灵活性:logging 模块允许你根据需要设置日志的级别、格式和输出位置。
  2. 可扩展性:你可以轻松地将日志输出到文件、控制台、网络等不同的目标。
  3. 结构化日志:logging 模块支持结构化日志记录,便于后续的分析和处理。
  4. 性能优化:与 print 相比,logging 模块在性能上进行了优化,适合在生产环境中使用。

logging 模块的基本用法

1. 导入 logging 模块

首先,我们需要导入 logging 模块:

实例

import logging

2. 配置日志级别

日志级别用于控制日志的详细程度。logging 模块提供了以下几种日志级别:

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

你可以通过以下代码设置日志级别:

实例

logging.basicConfig(level=logging.DEBUG)

3. 记录日志

设置好日志级别后,你可以使用以下方法记录日志:

实例

logging.debug("这是一条调试信息")
logging.info("这是一条普通信息")
logging.warning("这是一条警告信息")
logging.error("这是一条错误信息")
logging.critical("这是一条严重错误信息")

4. 日志输出格式

你可以通过 basicConfig 方法自定义日志的输出格式。例如:

实例

logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)

5. 将日志输出到文件

默认情况下,日志会输出到控制台。如果你希望将日志保存到文件中,可以这样配置:

实例

logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
filename="app.log"
)

logging 模块的高级用法

1. 使用多个日志记录器

在大型项目中,你可能需要为不同的模块或组件创建独立的日志记录器。可以通过以下方式实现:

实例

logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)

# 创建文件处理器
file_handler = logging.FileHandler("my_logger.log")
file_handler.setLevel(logging.DEBUG)

# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 设置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 将处理器添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(console_handler)

# 记录日志
logger.debug("这是一条调试信息")
logger.info("这是一条普通信息")

2. 日志过滤器

你可以通过过滤器来控制哪些日志需要被记录。例如:

实例

class MyFilter(logging.Filter):
def filter(self, record):
return record.levelno == logging.ERROR

logger.addFilter(MyFilter())

3. 日志轮转

当日志文件过大时,可以使用 RotatingFileHandlerTimedRotatingFileHandler 实现日志轮转:

实例

from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler("app.log", maxBytes=1024, backupCount=3)
logger.addHandler(handler)

logging 模块常用的属性和方法

1. 核心类

说明示例
logging.Logger记录器,用于发出日志消息(通过 logging.getLogger(name) 获取)logger = logging.getLogger("my_logger")
logging.Handler处理器,决定日志输出位置(如文件、控制台等)handler = logging.FileHandler("app.log")
logging.Formatter格式化器,控制日志输出的格式formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
logging.Filter过滤器,用于更精细地控制日志记录filter = logging.Filter("module.name")

2. Logger 对象常用方法

方法说明示例
logger.setLevel(level)设置日志级别(如 logging.DEBUGlogging.INFO)logger.setLevel(logging.DEBUG)
logger.debug(msg)记录 DEBUG 级别日志logger.debug("调试信息")
logger.info(msg)记录 INFO 级别日志logger.info("程序启动")
logger.warning(msg)记录 WARNING 级别日志logger.warning("磁盘空间不足")
logger.error(msg)记录 ERROR 级别日志logger.error("操作失败")
logger.critical(msg)记录 CRITICAL 级别日志logger.critical("系统崩溃")
logger.addHandler(handler)添加处理器logger.addHandler(handler)
logger.addFilter(filter)添加过滤器logger.addFilter(filter)

3. Handler 常用类型

Handler 类型说明示例
StreamHandler输出到流(如控制台)handler = logging.StreamHandler()
FileHandler输出到文件handler = logging.FileHandler("app.log")
RotatingFileHandler按文件大小分割日志handler = logging.RotatingFileHandler("app.log", maxBytes=1e6, backupCount=3)
TimedRotatingFileHandler按时间分割日志handler = logging.TimedRotatingFileHandler("app.log", when="midnight")
SMTPHandler通过邮件发送日志handler = logging.SMTPHandler("mail.example.com", "[email protected]", "[email protected]", "Error Log")

4. 日志级别(常量)

级别数值说明
CRITICAL50严重错误,程序可能无法继续运行
ERROR40错误,但程序仍可运行
WARNING30警告信息(默认级别)
INFO20程序运行信息
DEBUG10调试信息
NOTSET0继承父记录器的级别

5. Formatter 常用格式字段

字段说明示例输出
%(asctime)s日志创建时间2023年01月01日 12:00:00,123
%(levelname)s日志级别名称INFO
%(message)s日志消息内容程序启动成功
%(name)s记录器名称my_logger
%(filename)s生成日志的文件名app.py
%(lineno)d生成日志的行号42
%(funcName)s生成日志的函数名main

6. 快速配置方法

方法说明示例
logging.basicConfig()一键配置日志级别、处理器和格式(通常在程序入口调用)logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s')

常用参数:

  • level:设置根记录器级别

  • filename:输出到文件

  • filemode:文件模式(如 'w' 覆盖)

  • format:格式字符串

  • datefmt:日期格式(如 "%Y-%m-%d %H:%M:%S")

实例

1. 基础配置

实例

import logging

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

# 使用
logger = logging.getLogger("my_app")
logger.info("程序启动")

2. 多处理器复杂配置

实例

import logging

# 创建记录器
logger = logging.getLogger("my_module")
logger.setLevel(logging.DEBUG)

# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)

# 文件处理器
file_handler = logging.FileHandler("debug.log")
file_handler.setLevel(logging.DEBUG)

# 格式化
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加处理器
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 使用
logger.debug("调试信息") # 仅写入文件
logger.warning("警告!") # 同时输出到控制台和文件

3. 日志分割

实例


from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler(
"app.log", maxBytes=1e6, backupCount=3 # 每个文件1MB,保留3个备份
)
logger.addHandler(handler)
AI 思考中...

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /