2016-07-01 3 views

答えて

3

それがDKの答えで述べたようにlogクレートのようなものを使用することは理にかなっていますが、ここであなたが求めて何の直接対応を行う方法は次のとおりです。

// The debug version 
#[cfg(feature = "my_debug")] 
macro_rules! debug_print { 
    ($($args:expr),*) => { println!($($args),*); } 
} 

// Non-debug version 
#[cfg(not(feature = "my_debug"))] 
macro_rules! debug_print { 
    ($($args:expr),*) => {} 
} 

fn main() { 
    debug_print!("Debug only {}", 123); 
} 

そして、あなたのCargo.tomlで、[features]セクションを追加します。

[features] 
my_debug = [] 

出力はcargo run --features my_debugで表示され、平野cargo runとしません。

+0

これは、 'debug_assert! 'のようなマクロを制御する既存の' debug_assertions'属性を利用することでもう少し簡潔になります。 '#[cfg(feature =" my_debug ")]'ビットを '#[cfg(debug_assertions)]に変更し、その変更を' Cargo.toml'にドロップしてください。このようにして、リリースビルドではデバッグコードが自動的に無視されます。 –

8

自分で定義することもできますが、さまざまな目的でいくつかのマクロを定義するlogクレートを使用する方が簡単です(the log documentationを参照)。

クレートは、ログ用にフロントエンドのみを提供します。バックエンドを選択する必要があります。 logのドキュメントには基本的な例がありますが、env_loggerlog4rsのようなものを使用できます。

関連する問題