ログハンドラ¶
Rich は、Python のロギングモジュールによって書き込まれたテキストを、フォーマットして色付けする ログハンドラ を提供します。
リッチロガーを設定する例を次に示します。
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!")
リッチログは、コンソールマークアップ にリテラルの大かっこをエスケープする必要があることを知らないライブラリが多いので、デフォルトではロギングの コンソールマークアップ をレンダリングしません。ただし、ハンドラで 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 など)で作業している場合、トレースバック内で独自のアプリケーションからのコードのみを見たい場合があります。フレームワークコードを除外するには、モジュールまたは str パスのリストである Traceback、install、Console.print_exception で suppress 引数を設定します。
以下は、リッチ例外から 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])]
)
抑制されたフレームには、コードなしで行とファイルのみが表示されます。