说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的日志工具 logging
模块是标准库中的一个非常强大的日志记录框架,允许开发者记录程序的运行信息,便于调试和监控。
logging
的基本概念日志记录器 (Logger):它是程序中用于产生日志信息的对象。通过 logging.getLogger(name)
获取。日志记录器可以有多个,并且通过名字来区分。
处理器 (Handler):日志记录器并不直接将日志信息输出到目标位置(如控制台或文件),它们将日志传递给处理器。处理器决定了日志输出的具体位置。常用的处理器有:
StreamHandler
: 将日志输出到控制台FileHandler
: 将日志写入文件RotatingFileHandler
: 将日志写入文件,但会根据大小进行轮转TimedRotatingFileHandler
: 根据时间进行轮转格式器 (Formatter):格式器决定了日志信息的具体输出格式。可以包含时间戳、日志级别、日志消息等内容。格式器通过 logging.Formatter(fmt)
创建。
日志级别 (Level):日志有不同的严重性级别。常用的日志级别包括(从低到高):
DEBUG
: 调试信息,最详细的日志级别INFO
: 普通信息,不用于调试WARNING
: 警告信息,表示可能发生的问题ERROR
: 错误信息,表示程序遇到了问题CRITICAL
: 严重错误,程序可能无法继续运行过滤器 (Filter):用于更精细地控制哪些日志记录可以通过处理器。例如,可以根据模块名或日志级别来过滤日志。
使用 logging.basicConfig
可以快速配置日志系统,定义日志的格式、日志级别等。
import logging
logging.basicConfig(level=logging.INFO)
logging.info("This is an info message")
logging.warning("This is a warning")
这会输出类似以下内容到控制台:
INFO:root:This is an info message
WARNING:root:This is a warning
可以创建并配置自己的日志器,处理器和格式器来满足更复杂的日志需求。
import logging
# 创建日志器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建处理器并设置日志输出到文件
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.ERROR)
# 创建格式器并添加到处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 添加处理器到日志器
logger.addHandler(file_handler)
# 记录不同级别的日志
logger.debug("This is a debug message")
logger.error("This is an error message")
上面的代码将创建一个自定义日志器,并将错误级别及以上的日志输出到 app.log
文件,格式会包含时间戳、日志器名称和日志级别等信息。
为了防止日志文件无限增长,可以使用 RotatingFileHandler
实现日志轮转。比如,当日志文件达到一定大小时创建一个新文件。
import logging
from logging.handlers import RotatingFileHandler
# 创建 RotatingFileHandler,文件大小超过 1KB 后进行轮转,最多保留 5 个备份文件
handler = RotatingFileHandler('my_log.log', maxBytes=1024, backupCount=5)
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)
logger.addHandler(handler)
for i in range(1000):
logger.info(f"Log message {i}")
使用 TimedRotatingFileHandler
可以按照时间间隔进行日志轮转。
import logging
from logging.handlers import TimedRotatingFileHandler
# 创建 TimedRotatingFileHandler,每天生成一个新日志文件
handler = TimedRotatingFileHandler('timed_test.log', when='midnight', interval=1, backupCount=7)
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)
logger.addHandler(handler)
logger.info("This is a test message")
官方文档详细讲解了 logging
的各个组件,并提供了很多示例。你可以参考官方文档以了解更多高级特性:Python Logging 官方文档
更新时间:2024-09-12 20:38:25 标签:python 日志 logging