Rust:
ロギング
方法:
Rustで基本的なロギングシナリオをlog
クレートを用いて設定してみましょう。これはロギングのファサードを提供し、env_logger
はlog
クレートのためのロギング実装です。まず、Cargo.tomlにそれらを追加します:
[dependencies]
log = "0.4.14"
env_logger = "0.9.0"
次に、main.rs
でロガーをセットアップして初期化します:
use log::{info, warn};
fn main() {
env_logger::init();
info!("これはインフォメーションメッセージです。");
warn!("これは警告メッセージです。");
}
アプリをRUST_LOG=info cargo run
で実行すると、出力が表示されます:
INFO: これはインフォメーションメッセージです。
WARN: これは警告メッセージです。
RUST_LOG
環境変数をいじってみて、error
、warn
、info
、debug
、trace
に設定することでログの詳細度を制御します。
深堀り
ロギングの概念は新しいものではありません。それはコンピューティングの初期からありました。ロギングがソフトウェアで一般的になる前は、開発者はプリント文やデバッガーツールなどの原始的な方法に依存してプログラムの実行を追跡しました。プログラムが複雑になるにつれて、ロギングの構造化されたアプローチへのニーズも高まりました。
Rustでは、log
クレートはロギングの実装の詳細を抽象化し、異なるログバックエンドをプラグインすることを開発者に許可します。env_logger
は一般的な選択ですが、fern
、slog
、またはtracing
のようにそれぞれ独自の機能や構成オプションを持つ代替品があります。
ログの実装におけるいくつかの考慮事項には以下のものがあります:
ログレベル:詳細度を制御することが重要です。Rustの
log
クレートは、重大度の減少する順に、error、warn、info、debug、traceといういくつかのログレベルを定義しています。パフォーマンス:ログはパフォーマンスに影響を与える可能性があります。それを慎重に使用し、パフォーマンスに重要なパスでのログ記録を避けるか、本番環境での過度に詳細なログを避けることが重要です。
構造化ロギング:現代の最良の慣習には構造化ロギングが関与しています。これはログがJSONのような機械可読形式で書かれる場合です。
slog
のようなライブラリはRustでの構造化ロギングを可能にし、ELK StackやSplunkなどのログ管理システムを使用してインデックス作成および照会ができます。非同期ロギング:主要なアプリケーションへの影響を最小限に抑えるために、ロギングは非同期で行うことができます。これは通常、ログライブラリがインメモリキューに書き込み、別のスレッドがキューを処理し、宛先にログを書き込むことによって達成されます。
配置:多くのロギングフレームワークは、環境変数、設定ファイル、および/またはコードを通じて設定をサポートしています。この柔軟性は、異なる環境(開発、ステージング、本番)で出力を微調整するための鍵です。
参照
log
クレートのドキュメント:https://docs.rs/log/env_logger
クレートのドキュメント:https://docs.rs/env_logger/- Rust by Exampleのログページ:https://doc.rust-lang.org/rust-by-example/std_misc/log.html
slog
クレート、代替ロギングフレームワーク:https://github.com/slog-rs/slog- Tracing、Rustプログラムを計装するためのフレームワーク:https://crates.io/crates/tracing