答案页 · 12 道题

Python 日志练习答案

本页汇总 Python 日志 的 12 道练习。先做练习页,再回到这里核对准确答案和原因。

快速答案

本答案页包含 Python 日志 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。

答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。

01 · 选择题

日志器把记录发送到哪里?

  1. 它的处理器正确答案
  2. 默认发送到数据库
  3. 字符串列表
  4. 只发送到终端

答案: 它的处理器

为什么: 处理器负责目的地;日志器把记录交给它们。

02 · 选择题

根日志器的默认级别是什么?

  1. WARNING正确答案
  2. ERROR
  3. DEBUG
  4. INFO

答案: WARNING

为什么: 没有额外配置时,根日志器通常处理 WARNING 及以上。

03 · 选择题

日志器级别为 WARNING 时调用 logger.info 会怎样?

  1. 抛出错误
  2. 消息打印两次
  3. 级别自动变成 INFO
  4. 该日志器不发出记录正确答案

答案: 该日志器不发出记录

为什么: INFO 低于 WARNING 阈值,所以记录会被过滤。

04 · 选择题

格式化器会做什么?

  1. 改变日志器级别
  2. 把记录保存到文件
  3. 把记录转换成文本正确答案
  4. 删除旧处理器

答案: 把记录转换成文本

为什么: 格式化器控制处理器最终输出的文本布局。

05 · 填空题

补全信息性消息的级别。

import logging
logger = logging.getLogger("demo")
logger.setLevel(logging.____)

答案: INFO

为什么: logging.INFO 是信息性级别。

06 · 填空题

补全写入流的处理器。

import logging
from io import StringIO
stream = StringIO()
handler = logging.____(stream)

答案: StreamHandler

为什么: StreamHandler 把记录写入 StringIO 等流。

07 · 填空题

补全控制文本布局的类。

import logging
from io import StringIO
handler = logging.StreamHandler(StringIO())
handler.setFormatter(logging.____("%(levelname)s:%(message)s"))

答案: Formatter

为什么: Formatter 把记录变成最终字符串。

08 · 填空题

补全阻止向根日志器传播的值。

import logging
logger = logging.getLogger("demo")
logger.propagate = ____

答案: False

为什么: 把 propagate 设为 False 可以让记录留在当前日志器的处理器链中。

09 · 输出预测

这段程序打印出什么?

import logging
from io import StringIO
stream = StringIO()
handler = logging.StreamHandler(stream)
logger = logging.getLogger("demo")
logger.handlers[:] = [handler]
logger.setLevel(logging.INFO)
logger.propagate = False
logger.info("hello")
print(stream.getvalue().strip())

答案: hello

为什么: 处理器收到 info 记录,把 hello 写入流。

10 · 输出预测

代码的输出结果是什么?

import logging
from io import StringIO
stream = StringIO()
logger = logging.getLogger("demo")
logger.handlers[:] = [logging.StreamHandler(stream)]
logger.setLevel(logging.WARNING)
logger.propagate = False
logger.info("hidden")
logger.warning("shown")
print(stream.getvalue().strip())

答案: shown

为什么: info 记录低于阈值,warning 记录会被发出。

11 · 输出预测

屏幕上会显示什么?

import logging
from io import StringIO
stream = StringIO()
handler = logging.StreamHandler(stream)
handler.setFormatter(logging.Formatter("%(levelname)s:%(message)s"))
logger = logging.getLogger("demo")
logger.handlers[:] = [handler]
logger.setLevel(logging.INFO)
logger.propagate = False
logger.warning("check")
print(stream.getvalue().strip())

答案: WARNING:check

为什么: 格式化器把级别名称放在消息前面。

12 · 输出预测

这段代码会输出什么?

import logging
print(logging.getLevelName(20))

答案: INFO

为什么: 级别 20 的名称是 INFO。

先试一遍题目

打开 Python 日志 练习页,用即时反馈回答同样的 12 道题。

练习本课