Я понимаю, что компилятор Java способен исключать блоки кода, которые защищены выражением постоянной времени компиляции.Таким образом, теоретически вы должны быть в состоянии сделать это примерно так:
public class Logging {
public static final boolean ENABLED = true; // change to false
}
public class Something
....
if (Logging.ENABLED) {
logger.debug("hello mum");
}
}
К сожалению, вам нужно перекомпилировать каждый класс, который зависит от флага Logging.ENABLED, всякий раз, когда вы изменяете его значение.Поэтому я очень предпочитаю следующее:
public class Something
....
if (logger.isDebugEnabled()) {
logger.debug("hello mum");
}
}
, что имеет то преимущество, что вы можете делать детальные корректировки уровней ведения журнала во время конфигурации или даже во время выполнения;например, с использованием отладчика, JMX и т. д. Кроме того, накладные расходы на вызов logger.isDebugEnabled()
в log4j достаточно малы, поэтому они вряд ли будут заметны, если у вас нет безумного количества входов в базу кода.