日志处理程序

Rich 提供了一个 日志处理程序,它将格式化和着色 Python 日志模块写入的文本。

以下是如何设置 Rich 日志记录器的示例

import logging
from rich.logging import RichHandler

FORMAT = "%(message)s"
logging.basicConfig(
    level="NOTSET", format=FORMAT, datefmt="[%X]", handlers=[RichHandler()]
)

log = logging.getLogger("rich")
log.info("Hello, World!")

默认情况下,Rich 日志不会渲染 控制台标记,因为大多数库不会意识到需要转义文字方括号,但你可以通过在处理程序上设置 markup=True 来启用它。或者,你可以通过提供以下 extra 参数来为每个日志消息启用它

log.error("[bold red blink]Server is shutting down![/]", extra={"markup": True})

类似地,高亮显示器可以为每个日志消息覆盖

log.error("123 will not be highlighted", extra={"highlighter": None})

处理异常

RichHandler 类可以配置为使用 Rich 的 Traceback 类来格式化异常,这提供了比内置异常更多的上下文。为了在你的日志中获得漂亮的异常,请在处理程序构造函数上设置 rich_tracebacks=True

import logging
from rich.logging import RichHandler

logging.basicConfig(
    level="NOTSET",
    format="%(message)s",
    datefmt="[%X]",
    handlers=[RichHandler(rich_tracebacks=True)]
)

log = logging.getLogger("rich")
try:
    print(1 / 0)
except Exception:
    log.exception("unable print!")

你可以使用许多其他选项来配置日志输出,有关详细信息,请参阅 RichHandler 参考。

抑制帧

如果你正在使用框架(click、django 等),你可能只对查看回溯中来自你自己的应用程序的代码感兴趣。你可以通过在 TracebackinstallConsole.print_exception 上设置 suppress 参数来排除框架代码,它应该是一个模块或 str 路径列表。

以下是如何从 Rich 异常中排除 click

import click
import logging
from rich.logging import RichHandler

logging.basicConfig(
    level="NOTSET",
    format="%(message)s",
    datefmt="[%X]",
    handlers=[RichHandler(rich_tracebacks=True, tracebacks_suppress=[click])]
)

被抑制的帧将只显示行和文件,没有任何代码。