より良いタイトルを思い出せませんでした、それをより良いものに自由に変更してください:)
私のアプリケーションには、次のような多くのロギングステートメントが含まれています。
var logger = new Logger(/*..get flag from settings if the logger should be active..*/);
// ....
logger.LogActivity(..serialize an object..);
//...
logger.LogActivity(..get another object's expensive overriden ToString method..);
//...
logger.LogActivity(..log something new..);
ロガークラス:
public class Logger
{
private readonly bool _isActive;
public Logger(bool isActive)
{
_isActive = isActive;
}
public void LogActivity(string activity)
{
if (_isActive)
{
// Save activity to Database.
}
}
}
設定でロガーを無効にすると(したがって、Loggerクラスの_isActiveフィールドがfalseになると)、データベースに何も保存されません。ただし、Logger.LogActivityメソッドのすべての式は引き続き評価され(たとえば、前の例の..serializeオブジェクト..)、これによりアプリケーションの速度が低下します。次のようなログステートメントを使用できます。
var logger = new Logger(/*..get flag from settings if the logger should be active..*/);
// ....
if (loggerIsActive) logger.LogActivity(..serialize an object..);
//...
if (loggerIsActive) logger.LogActivity(..get another object's expensive overriden ToString method..);
//...
if (loggerIsActive) logger.LogActivity(..log something new..);
ただし、LogActivityメソッドのみを変更する方がはるかに良いでしょう... LogActivityメソッドのみを変更して、ロガーが無効になっている場合にLogActivity呼び出しの式が評価されないようにすることは可能ですか?ええと-これがC#で可能だとしたら驚きますが、これを行う他の方法/パターンはありますか?