快速答案
本答案页包含 Python 日志 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。
答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。
日志器把记录发送到哪里?
答案: 它的处理器
为什么: 处理器负责目的地;日志器把记录交给它们。
根日志器的默认级别是什么?
答案: WARNING
为什么: 没有额外配置时,根日志器通常处理 WARNING 及以上。
日志器级别为 WARNING 时调用 logger.info 会怎样?
答案: 该日志器不发出记录
为什么: INFO 低于 WARNING 阈值,所以记录会被过滤。
格式化器会做什么?
答案: 把记录转换成文本
为什么: 格式化器控制处理器最终输出的文本布局。
补全信息性消息的级别。
import logging
logger = logging.getLogger("demo")
logger.setLevel(logging.____)答案: INFO
为什么: logging.INFO 是信息性级别。
补全写入流的处理器。
import logging
from io import StringIO
stream = StringIO()
handler = logging.____(stream)答案: StreamHandler
为什么: StreamHandler 把记录写入 StringIO 等流。
补全控制文本布局的类。
import logging
from io import StringIO
handler = logging.StreamHandler(StringIO())
handler.setFormatter(logging.____("%(levelname)s:%(message)s"))答案: Formatter
为什么: Formatter 把记录变成最终字符串。
补全阻止向根日志器传播的值。
import logging
logger = logging.getLogger("demo")
logger.propagate = ____答案: False
为什么: 把 propagate 设为 False 可以让记录留在当前日志器的处理器链中。
这段程序打印出什么?
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 写入流。
代码的输出结果是什么?
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 记录会被发出。
屏幕上会显示什么?
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
为什么: 格式化器把级别名称放在消息前面。
这段代码会输出什么?
import logging
print(logging.getLevelName(20))答案: INFO
为什么: 级别 20 的名称是 INFO。
先试一遍题目
打开 Python 日志 练习页,用即时反馈回答同样的 12 道题。