Так что мне не совсем нравятся все ответы здесь, поэтому я собираюсь войти.
Использование файла конфигурации
Вы видите много ответов здесьговорю вам использовать файл конфигурации, потому что это лучшая практика.Я хочу лучше объяснить, как это сделать программно, но прежде чем я это сделаю, я хочу сказать, что я могу видеть, откуда они берутся, и в настроении быть объективным, я вас немного просветлю (особенно потому, что никто не говорит почему это плохая практика).Я на самом деле хочу поделиться тем, что кто-то сказал в отдельном ответе StackOverflow, касающемся программной настройки уровня регистратора ( Почему сообщения журнала Level.FINE не отображаются? ):
Это не рекомендуется, так как это приведет к переопределению глобальной конфигурации.Использование этого во всей вашей кодовой базе приведет к возможной неконтролируемой конфигурации регистратора.
В этой заметке, я думаю, у Энди Томаса есть хороший ответ, связанный с тем, что он не делает это непрограммически.
Программная установка уровня
При этом я хочу более подробно рассказать о том, как делать это программно, потому что я думаю, что он имеет свои применения.
Представьте себе сценарий, в котором вы пишетечто-то с интерфейсом командной строки, и у вас есть возможность указать подробность вашего выполнения или даже куда он идет (как в файлах динамического журнала).Я могу ошибаться, но вы, вероятно, не захотите делать это статически в файле .conf.Особенно, если вы не хотите, чтобы ваша пользовательская база отвечала за установку этих параметров (по любой произвольной причине) в файле конфигурации.Однако это происходит за счет приведенной выше цитаты.Вот пример того, как вы можете сделать это программно, сохраняя все существующие обработчики на том уровне, на котором они уже находятся, и только FileHandler
принимает новый уровень:
public static void setDebugLevel(Level newLvl) {
Logger rootLogger = LogManager.getLogManager().getLogger("");
Handler[] handlers = rootLogger.getHandlers();
rootLogger.setLevel(newLvl);
for (Handler h : handlers) {
if(h instanceof FileHandler)
h.setLevel(newLvl);
}
}
Я хотелподробнее об этом, за принятый ответ по одной причине, в частности.Делая это программно, вы просто хотите убедиться, что вы установили уровень для логгера и обработчика (ей).Как это работает, он проверит, не слишком ли низкий запрос для регистратора, и если это так, он отменит его.Затем обработчики проходят одинаковую проверку, поэтому вы должны убедиться, что регистраторы и обработчики установлены на желаемый уровень.