Rustのロギングには、 logと env_loggerの組み合わせが便利です。
ほかの言語と同様、error, warn, info, debug, traceといったログレベル別のログ出力、表示制御が可能です(デフォルトはerror)。
ログ出力
ログ出力は、logクレートのマクロを用います。
以下のように、ログレベルを指定するマクロでメッセージ出力します。使い方は、println!()
と同様です。
use log::debug;
fn some_function() {
debug!("some debug log");
}
ログ表示
ログ表示は、env_logger::init()
を実行すると有効になります。
fn main() {
env_logger::init();
}
ログレベルは、実行時に環境変数RUST_LOG
で指定できます。
env_loggerがない場合の挙動
env_loggerなどのロギング実装がない場合の挙動は、 logのドキュメントに記載されています。
logクレートはロギング実装を切り替えられ、何も指定していない場合には、noopというほぼ何もしない実装で動作するようです。
Rustではクレートを細分化して実装する手法が一般的ですが、部品となるクレートはenv_loggerなどの存在を気にせずlogクレートのマクロでメッセージ実装しても問題ありません。
また、env_logger以外に利用できる実装は、logのドキュメントに掲載されています。
WebAssemblyなど、用途に応じて選択できます。
適切なログレベル
env_loggerのログレベルは利用しているクレートすべてに有効です。
たとえばdebugレベルでは、ネットワークミドルウェアなども詳細なログを出力するものがあります。
多くのログに埋没すると使いにくいため、目的に応じて適切なログレベルを選択することが重要です。
⁋ 2021/07/28↻ 2024/11/07
中馬崇尋
Chuma Takahiro
Chuma Takahiro