memo

2023-01-15

rust の log 周りメモ

rust のコードを読んでいると env_logger::init() とかやってるのをよく目にするんだけど、このあたりの何がどうなってるのか分かってなかったので、軽く調べたメモ。

  • log crate

    • https://docs.rs/log/latest/log/

    • log 記録用の API を提供

      • info! とか debug! とかの macro

    • 渡されたログメッセージをどうするか (画面に表示するかどうかとか) は、この crate の対象範囲外。

      • (後述する logger の設定が何もされていない状態だと、メッセージは無視されるっぽい。)

    • ライブラリ系の crate はこの log crate のみに依存しておく。

  • logger 系の crate たち

    • log crate で記録されたログメッセージをどうすんのか、というのを担当

      • 画面 (標準エラー) に表示するとか、 syslog に転送するとか。

    • 実行ファイル (main()) の頭に初期化処理を書いておく。

    • 色々ある

  • ついでに env_logger について

    • https://docs.rs/env_logger/latest/env_logger/

    • 標準エラーにログを出力する、シンプルな logger

    • 名前のとおり、環境変数を使って設定を変更できる

      • ログレベルの変更やら、対象のモジュール名の指定やら。

    • env_logger::init() だけやっとけばいいお手軽さが売りなのかな?

      • 環境変数でアレコレ設定するので、それ用のコードをわざわざ書く必要がない。

        • 例えば、コマンドライン引数をパースしてログレベルを受け取ったのを logger に引き渡すとか、そういうコードが不要。

      • とりあえず入れとけば、あとは print デバッグみたいな感覚で log を使えるようになるし。