Я не знаком с log4net или log.DebugFormat (...).
Но стоимость лесозаготовок действительно в двух областях.
Первый вызов журнала, а второй - фактическое сохранение информации журнала.
Защитники помогают уменьшить минимальный вызов регистрации, когда регистрация фактически не требуется. Он имеет тенденцию быть очень быстрым, поскольку это немного больше, чем вызов метода и сравнение двух скаляров.
Однако, если вы не используете охранники, стоимость может стать ценой создания фактических аргументов ведения журнала.
Например, в log4j, это был общий язык:
log.debug("Runtime error. Order #" + order.getOrderNo() + " is not posted.");
Здесь, стоимость является фактическим вычислением выражения строки, делающим сообщение. Это связано с тем, что независимо от уровня ведения журнала, это выражение и результирующая строка создаются. Представьте себе, если бы вместо того, чтобы у вас было что-то вроде:
log.debug("Something wrong with this list: " + longListOfData);
Это может создать большую и дорогую строковую переменную, которая, если уровень журнала не был установлен на DEBUG, будет просто впустую.
Стражники:
if (log.isDebug()) {
log.debug(...);
}
Устранить эту проблему, так как вызов isDebug дешево, особенно по сравнению с фактическим созданием аргумента.
В моем коде, я написал обертку для лесозаготовок, и я могу создавать журналы, как это:
log.debug("Runtime error. Order # {0} is not posted.", order.getOrderNo());
Это хороший компромисс. Это зависит от Java varargs, и мой код проверяет уровень ведения журнала, а затем форматирует сообщение соответствующим образом. Это почти так же быстро, как охранники, но гораздо чище писать.
Теперь, журнал.DebugFormat вполне может сделать то же самое, чего я не знаю.
В дополнение к этому, конечно, это фактическая стоимость регистрации (на экране, в файл, в сокет и т. Д.). Но это всего лишь стоимость, которую вам нужно принять. Моя лучшая практика для этого, когда это практично, состоит в том, чтобы направлять фактические сообщения журнала в очередь, которая затем извлекается и выводится на правильный канал с использованием отдельного потока. Это, по крайней мере, помогает вести журнал несовместимости с основными компьютерами, но у него есть свои затраты и сложность.
Заходите ли вы в консоль, в файл, в базу данных? Это имеет большое значение с точки зрения производительности. – 2008-10-07 15:19:27