Это не совсем другой ответ, чем @Nobby, потому что он прав насчет уровней. Я скажу, что вам не нужно делать проверку IfXXXXEnabled перед регистрацией.
Это то, что вы в настоящее время имеете в своем коде C # в своем вопросе для сайта регистрации вызовов:
if (logger.IsDebugEnabled) logger.Debug(logMessage) else if (logger.IsInfoEnabled)log.Info(logMessage);
@ Нобби предполагает, что это можно сделать чище:
if (logger.IsDebugEnabled) logger.Debug(logMessage);
if (logger.IsInfoEnabled) logger.Info(logMessage);
Я не думаю, что это действительно так. С вашим исходным кодом будут регистрироваться ТОЛЬКО сообщение отладки ИЛИ информационное сообщение. Если вы удалите вложение, то, в зависимости от включенного уровня ведения журнала, вы можете зарегистрировать ОБА сообщения.
Я думаю, что вы должны войти таким образом:
logger.Debug(logMessage);
logger.Info(logMessage);
Методы ведения журнала (logger.Debug, logger.Info и т. Д.) Уже выполняют проверку IsXXXEnabled и не будут регистрировать, если этот уровень ведения журнала не включен. Вы можете сохранить журнал ввода (и путаницу), просто позвонив в журнал напрямую, а не защитив его проверкой if
.
Бывают случаи, когда вы хотите использовать проверку IsXXXEnabled. Например, если у вас есть какая-то работа по вычислению значений, которые должны быть зарегистрированы, и вы хотите выполнять эти вычисления только при регистрации:
if (logger.IsDebugEnabled)
{
int value1 = DoSomeExpensiveCalculation();
int value2 = DoSomeOtherExpensiveCalculation();
logger.DebugFormat("v1 = {0}, v2 = {1}", value1, value2);
}
Таким образом, вы не платите цену вычислений, если вы не собираетесь их регистрировать.
Наконец, в NLog 2.0 у вас есть доступ к лямбда-синтаксису, который позволит вам отложить потенциально дорогостоящие операции, если сообщение фактически не зарегистрировано:
logger.Debug(() => string.Format("v1 = {0}, v2 = {1}", DoSomeExpensiveCalculation(), DoSomeOtherExpensiveCalculation()));
logger.Debug(() => "message" + i + ", " + j + "," + k);
В обоих случаях выражение, передаваемое в NLog, не будет оцениваться, если не активирован уровень DEBUG.