logging 模块基础
配置日志记录器、设置级别,并正确输出消息。
logging 模块基础 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
为什么使用日志记录而不是 print?
logging 模块提供严重性级别、可配置的输出目标和时间戳,还能在不修改代码的情况下静默输出。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")日志级别
Python 按严重性递增定义了五个标准级别:DEBUG、INFO、WARNING、ERROR、CRITICAL。只有级别达到配置级别或更高的消息才会被输出。
import logging
# Numeric values:
# DEBUG = 10
# INFO = 20
# WARNING = 30
# ERROR = 40
# CRITICAL = 50
logging.basicConfig(level=logging.WARNING)
logging.debug("hidden") # not shown
logging.warning("shown") # shown获取日志记录器
在每个模块中使用 logging.getLogger(__name__)。这样会创建与模块结构相匹配的层级。
import logging
logger = logging.getLogger(__name__)
def process(data):
logger.info("Processing %d items", len(data))
return [x * 2 for x in data]basicConfig 选项
basicConfig 可以快速配置根日志记录器。常见的关键字参数包括:level、format、filename、filemode。
import logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(name)s — %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)日志格式字段
主要格式字段包括:%(levelname)s、%(name)s、%(message)s、%(asctime)s、%(filename)s、%(lineno)d。
import logging
fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")记录异常
在 except 代码块中使用 logger.exception(),即可记录消息 AND 完整的回溯信息。
import logging
logger = logging.getLogger(__name__)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Division failed")
# Logs message + traceback automatically使用 extra= 添加上下文
将字典作为 extra= 传入,即可向日志记录中添加自定义字段。
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(
format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})延迟字符串格式化
请分别传入格式化参数,不要预先格式化字符串。这样可以避免在消息被过滤时产生字符串构建开销。
import logging
logger = logging.getLogger(__name__)
# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")
# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))禁用日志记录
调用 logging.disable(level),可以在全局范围内禁止所有不高于该级别的消息;这在测试中很有用。
import logging
logging.disable(logging.CRITICAL) # suppress everything
# All log calls now silently do nothing
logging.disable(logging.NOTSET) # re-enable日志记录器层级
日志记录器名称使用点号作为分隔符。子日志记录器会将记录传递给父日志记录器,除非设置了 propagate=False。
import logging
parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")
# child propagates to parent by default
child.warning("DB slow") # also appears in myapp's handlers根日志记录器
根日志记录器(来自 logging.warning() 等调用)是所有日志记录器的祖先。您可以使用 basicConfig 配置它,也可以直接向其添加处理器。
import logging
root = logging.getLogger() # root logger
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
root.addHandler(handler)快速检查
在 except 代码块中,应使用哪个日志记录方法来自动包含完整的回溯信息?
回顾
使用带名称的日志记录器和 getLogger(__name__),通过 basicConfig 进行配置,延迟传入格式化参数,并使用 logger.exception() 记录错误回溯信息。日志记录器会形成一个以根日志记录器为根的层级结构。
常见问题解答
「logging 模块基础」课时是免费的吗?
是的 — 「logging 模块基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「logging 模块基础」这节课中我会学到什么?
配置日志记录器、设置级别,并正确输出消息。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「logging 模块基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- logging 模块基础
- 处理器、格式化器与过滤器
- 结构化日志记录
- 使用 pdb 调试