Ведение журнала выполнено правильно

Итак, моя проблема заключается в ведении журнала и в том, как обрабатывать операторы журнала, которые могут повлиять на ваш код и ваше поведение во время выполнения.

Файлы журнала ... каждая программа должна писать их для правильного решения проблем, но как это сделать правильно?

Большинство операторов журнала очень дорого получить, потому что они должны предоставлять полезную информацию, и они всегда создаются, даже если ведение журнала отключено полностью.

Ведение журнала можно настроить с помощью xmls, inCode или в некоторых настройках и т. Д., Но это не решает проблему построения строки.

Например, следующий код всегда загружает огромное лениво загружаемое дерево, которое никогда не будет загружено полностью при нормальном выполнении.

Все дерево создается только для того, чтобы этот оператор регистрации отображался в файле журнала

( Хорошо, я знаю ..., но это просто замена всех сложных методов ведения журнала, которые существуют в большинстве программ, которые никогда не должны выполняться во время нормального выполнения выпуска )

public void SomeMethod(){
    logger.Debug(someObject.GetHeavyDescriptionFromLazyTree());
}

Метод someObject.GetHeavyDescriptionFromLazyTree () всегда вызывается, даже если ведение журнала отключено, поэтому есть несколько общих решений этой проблемы, например:

public void SomeMethod(){
#if DEBUG
    logger.Debug(someObject.GetHeavyDescriptionFromLazyTree());
#endif       
}

public void SomeMethod(){
    if(logger.DoLogDebug())
        logger.Debug(someObject.GetHeavyDescriptionFromLazyTree());
}

Я думаю, ясно, что флаг компилятора #if DEBUG не является решением для продуктивного кода. {{1} } Если я использую logger.DoLogDebug () , будет слишком много кода для проверки, включено ли ведение журнала ... так что это тоже не может быть решением.

Я думал, что ConditionalAttribute может помочь, но он также привязан к флагам компилятора и не деактивирует вызов GetHeavyDescriptionFromLazyTree

[Conditional("DEBUG")]  
public void Debug(string debugMessage) 
{ 
    Console.WriteLine(debugMessage); 
} 

Итак, я ищу решение для ведения журнала, которое

  • не является чрезмерным ограничением моего исходного кода операторами отладки
  • , где уровень ведения журнала определяется во время выполнения, а не во время компиляции
  • , где операторы разрешаются только в случае необходимости (logLevel> definedLogLevel)

Дополнительные строки журнала для лучшего ответ; -)

Отредактировано: я ищу решение в .NET 2.0

8
задан oberfreak 1 December 2011 в 20:33
поделиться