rust の log 周りメモ
rust のコードを読んでいると env_logger::init()
とかやってるのをよく目にするんだけど、このあたりの何がどうなってるのか分かってなかったので、軽く調べたメモ。
log
cratelog 記録用の API を提供
info!
とかdebug!
とかの macro
渡されたログメッセージをどうするか (画面に表示するかどうかとか) は、この crate の対象範囲外。
(後述する logger の設定が何もされていない状態だと、メッセージは無視されるっぽい。)
ライブラリ系の crate はこの
log
crate のみに依存しておく。
logger 系の crate たち
log
crate で記録されたログメッセージをどうすんのか、というのを担当画面 (標準エラー) に表示するとか、 syslog に転送するとか。
実行ファイル (
main()
) の頭に初期化処理を書いておく。色々ある
ついでに
env_logger
について標準エラーにログを出力する、シンプルな logger
名前のとおり、環境変数を使って設定を変更できる
ログレベルの変更やら、対象のモジュール名の指定やら。
env_logger::init()
だけやっとけばいいお手軽さが売りなのかな?環境変数でアレコレ設定するので、それ用のコードをわざわざ書く必要がない。
例えば、コマンドライン引数をパースしてログレベルを受け取ったのを logger に引き渡すとか、そういうコードが不要。
とりあえず入れとけば、あとは print デバッグみたいな感覚で log を使えるようになるし。