Я пытаюсь улучшить свой класс Logger с помощью некоторых условий, чтобы контролировать, что и где регистрировать. У меня есть два вида функций ведения журнала:
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 действительно вызывается, но не вызывает Log(msg, filename)
. Отладчик просто перескакивает прямо через вызов функции в конец функции VerboseLog()
.
Когда я удаляю условные операторы из метода Log(string msg)
, он работает.
Кто-нибудь знает, почему это происходит или что делать, чтобы это называлось?