何をログに記録し、どこにログを記録するかを制御するために、いくつかの条件を使用してLoggerクラスを拡張しようとしています。2種類のロギング関数があります。
public static class Logger
{
[Conditional("Logging"), Conditional("VerboseLogging")]
public static void Log(string msg, string filename)
{
// log to file
}
[Conditional("VerboseLogging")]
public static void VerboseLog(string msg, string filename)
{
Log(msg, filename); // just defer call to Log(string msg)
}
}
ただし、次のプログラムを実行する
#define Logging
#define VerboseLogging
static void Main(string[] args)
{
Logger.Log("Logging", "");
Logger.VerboseLog("VerboseLogging", "");
}
「VerboseLogging」が欠落している出力「Logging」のみが生成されます。
アプリケーションをデバッグすると、VerboseLoggingは実際に呼び出されますが、は呼び出されませんLog(msg, filename)
。デバッガーは、関数呼び出しを飛び越えて関数の最後に移動するだけVerboseLog()
です。
Log(string msg)
メソッドから条件を削除すると、機能します。
なぜこれが起こるのか、それをどうするのかについて誰かが手がかりを持っていますか?