Мы приняли практику определения частной статической логической переменной DEBUG только для чтения в каждом классе.
private static readonly log4net.ILogger LOG = log4net.LogManager.GetLogger();
private static readonly bool DEBUG = LOG.IsDebugEnabled;
каждая фактическая строка журнала отладки выглядит следующим образом
if (DEBUG) LOG.Debug(...);
где ... может иметь произвольную сложность и оценивается только тогда, когда требуется отладка.
См .: http://logging.apache.org/log4net/release/faq.html, ответ на вопрос «Что ДЕЙСТВИТЕЛЬНО НАИБОЛЕЕ БЫСТРЫЙ способ (не) ведения журнала?»
Это работает для нас, так как мы только читаем конфигурацию журнала при запуске.
Поскольку у нас есть по крайней мере один оператор отладки на вызов функции, мы чувствовали, что написать if (DEBUG) стоило усилий, чтобы добиться максимальной производительности при отключенной отладке. Мы провели некоторые измерения с включенной и выключенной отладкой и обнаружили увеличение производительности от 10 до 20%. Мы не измеряли, каков был эффект if (DEBUG).
Кстати: мы делаем это только для отладочных сообщений. Предупреждения, информационные сообщения и ошибки создаются непосредственно через LOG.Warn и т. Д.