いくつかのレベルのロギングがあるとします。トレース、デバッグ、情報、エラーです。レベルがそのglobal_severity_level小さい場合create_messageなしC++での遅延ログ
enum log_level = {trace, debug, info, error};
log_level global_log_level = info;
void log(log_level level, string& message){
if (level >= global_log_level){
std::cout << message << std::endl;
}
}
string create_message(){
...
}
log_level level = debug;
log (level, create_message());
が呼び出されている次のコードを書くための方法があるかどう 私は思っていました。実際、create_messageはかなり長くても、文字列を作成しても関係ありません。多くの "デバッグ"ログがある場合、それらは非デバッグモードで実行すると相当なオーバーヘッドになる可能性があります。
"log"関数がマクロの場合は、そうすることが可能です。severity> minimal_severityの場合のみcreate_message()を呼び出します。マクロなしでこれを行う別の方法はありませんか?上記で
EDIT
、それは何でもかまいませんので、私は特に、create_messageが指定されていませんでした。この場合
log(level, "Created object " + my_object.getName());
を、そのようなログ書き込みをするが方法です。プログラマがログを呼び出すために、完全な文字列が比較的透明な方法で作成されていないことを確認します。
感謝
'create_message()'に 'global_log_level'をチェックさせることができます。 – NPE
'log()'に 'create_message'関数を渡すことができますので、' log() 'はレベルが適切な場合にのみ高価なメッセージを作成しますか? – JaredC
こんにちは、メッセージはどこから来ても構いませんが、log(level、 "Object" + "my_object.getName()+"が作成されたように、その場で書くことができるので、未定義の関数create_message() ; - その場合、私はcreate_message()に何も渡すことができません。これは本質的に2つの文字列の間の演算子です...そして、どちらも関数としてログに渡すことはできません。 – GHL