🗒️
Rustでログを出力しよう
はじめに
Rustのプログラムでログを出力できるようにしましょう!
いつかログ出力ライブラリはありますが、今回はtokioとの相性がよいtracing
を使っていきます。
追加済みのコードはこちらにあります。
最速で環境を構築する場合
クローンすればすぐ環境を作成できます。
git clone https://github.com/ao-39/rust_devcontainer.git -b add_logger
VSCodeの左下の><
のメニューからコンテナーのリビルド
を選択すれば環境を立ち上げられます。
タイムゾーンを設定する
linuxの場合はdate
コマンドを実行すれば時刻を確認できます。
VSCodeのDevcontainerを使っている場合のタイムゾーン変更方法
.devcontainer/docker-compose.yml
のRustのコンテナにタイムゾーンの環境変数を設定しましょう。
.devcontainer/docker-compose.yml
services:
rust_devcontainer:
...
environment:
TZ: Asia/Tokyo
ライブラリを追加する
Cargo.toml
dotenvy = "0.15.7"
tracing = "0.1.37"
tracing-subscriber = { version= "0.3.17", features = ["std", "env-filter", "time", "local-time"]}
.env
から環境変数を取得するためにdotenvyを追加します。
.envファイルにログレベルを追加する
RUST_LOG="DEBUG"
ERROR
, WARN
, INFO
, DEBUG
, TRACE
を選べます。
ロガーの設定を追加する
use tracing_subscriber::{fmt::time::LocalTime, EnvFilter};
fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenvy::dotenv()?;
tracing_subscriber::fmt()
.with_timer(LocalTime::rfc_3339())
.with_env_filter(EnvFilter::from_default_env())
.with_file(true)
.with_line_number(true)
.init();
tracing::info!("Hello, world!");
Ok(())
}
以上で設定終了です。cargo run
を実行することでログとしてHello, world!が表示されます。
おわりに
tracingは構造化ログや、非同期タスクの開始、終了時間も出力することができるなど、ロガーとして高機能になってます。様々な例にも使われていますので、今後もさわっていけたらと思います。
Discussion