🦀

Rustのログ処理をレベル別に行う

に公開

この記事の背景

  1. Rustでログにかかわる処理を理解しようとする際、その他の(ログ処理以外の)実装を含むコード
    ではなく、純粋にログ処理のみを対象とするコードで理解するため。
  2. 実行環境がLinuxと思われるコマンドのベタ張りで説明している記事が多く、Windows11環境での
    実装時に実行すべきコマンドをWeb検索を行った上で直接見つけられなかったため。

前提条件

  • Rustのプログラムファイルを新規に作成することができる。(Hello Worldが行える程度でOK)
  • CLIでのコマンド操作が行える。

実行環境

OS:Microsoft Windows11 Pro(AMD64) 10.0.26100 ビルド 26100
Rust:rustc 1.86.0 (05f9846f8 2025-03-31)
Cargo:cargo 1.86.0 (adf9b6ad1 2025-02-28)

実行プログラム

main.rs

use log::{info, warn, error, debug, trace};

fn main() {
    env_logger::init();
    println!("start");
    // ログレベルに応じた出力
    trace!("これは trace ログです");
    debug!("これは debug ログです");
    info!("これは info ログです");
    warn!("これは warn ログです");
    error!("これは error ログです");
    println!("stop");
}

cargo.toml

[package]
name = "<任意のプロジェクト名>"
version = "0.1.0"
edition = "2024"

[dependencies]
log = "0.4.27"
env_logger = "0.11.8"

実行コマンド1

以下で実行するコマンドはPowerShellでの実行を想定しています。
WindowsではコマンドプロンプトとPowerShellで挙動に違いがあるため注意。

$env:RUST_LOG = "trace"
cargo run

結果

start
[<日付情報> TRACE logtest] これは trace ログです
[<日付情報> DEBUG logtest] これは debug ログです
[<日付情報> INFO  logtest] これは info ログです
[<日付情報> WARN  logtest] これは warn ログです
[<日付情報> ERROR logtest] これは error ログです
stop

実行コマンド2

$env:RUST_LOG = "info" 
cargo run

結果

start
[<日付情報> INFO  logtest] これは info ログです
[<日付情報> WARN  logtest] これは warn ログです
[<日付情報> ERROR logtest] これは error ログです
stop

まとめ

実行コマンド1,2は、環境変数に入れるログのレベル(指定以上のレベルのログを表示する)を変化させて同一のプログラムを動作させたものである。
これを用いることで同一のプログラムとして動作させながら、実行環境によってログに表示する情報量をコントロールすることができる。

Discussion