Где java.util.logging.Logger хранит их журнал - PullRequest
38 голосов
/ 11 июня 2010

Это может быть глупый вопрос, но я немного потерян с java Logger

private static Logger logger = Logger.getLogger("order.web.OrderManager");
logger.info("Removed order " + id + ".");

Где я вижу журнал? Также эта цитата из библиотеки java.util.logging.Logger:

При каждом вызове регистрации Logger первоначально выполняет дешевую проверку уровня запроса (например, SEVERE или FINE) по отношению к эффективному уровню регистрации регистратора. Если уровень запроса ниже уровня журнала, вызов регистрации немедленно возвращается.
После прохождения этого первоначального (дешевого) теста Logger выделит LogRecord для описания сообщения регистрации. Затем он вызовет фильтр (если он есть), чтобы выполнить более детальную проверку необходимости публикации записи. Если это пройдет, он опубликует LogRecord в своих выходных обработчиках.

Значит ли это, что если у меня есть 3 request level log:

logger.log(Level.FINE, "Something");
logger.log(Level.WARNING, "Something");
logger.log(Level.SEVERE, "Something");

А у меня log level - СЕРЬЕЗНО, я вижу все три журнала, и если мой log level - ПРЕДУПРЕЖДЕНИЕ, тогда я не вижу СЕРЬЕЗНЫЙ журнал, верно? И как мне установить log level?

Ответы [ 3 ]

28 голосов
/ 11 июня 2010

Где я вижу журнал?

В файле журнала или стандартном выводе, в зависимости от вашей фактической конфигурации обработчика журнала. Это может быть установлено через файл свойств или напрямую через API регистрации.

Означает ли это, что если у меня 3 уровня журнала запросов ...

SEVERE является наиболее важным (самый высокий приоритет), а FINE является наименее важным типом сообщения из 3, показанных в вашем примере. Таким образом, если ваш уровень журнала SEVERE, регистрируются только сообщения SEVERE. Если уровень FINE, все 3 сообщения регистрируются.

Это очень полезно, когда в реальной производственной среде вам может понадобиться регистрировать только ошибки и, возможно, предупреждения (которые, надеюсь, довольно редко, но вы хотите знать о них), поэтому вы можете установить для уровня журнала значение WARNING. Однако в вашей среде разработки, когда, например, При отладке проблемы вы хотите видеть всю информацию в журналах, даже если она создает большой объем данных журнала и замедляет работу приложения. Таким образом, вы установили уровень журнала FINE или FINEST.

Вот хорошее введение в Java Logging .

Обновление: простой пример с приведенной выше страницы, чтобы настроить регистратор для входа в файл на уровне FINEST:

Handler fh = new FileHandler("%t/wombat.log");
Logger.getLogger("").addHandler(fh);
Logger.getLogger("com.wombat").setLevel(Level.FINEST);

Чтобы войти в консоль, замените FileHandler выше на ConsoleHandler:

Handler ch = new ConsoleHandler();
Logger.getLogger("").addHandler(ch);

Это всего лишь пример - в реальном приложении предпочтительно настраивать ведение журнала через файл свойств конфигурации.

5 голосов
/ 11 июня 2010

Обзор Java TM Logging довольно интересно ответить на все ваши вопросы по Java Logger:

logging overview

Вы увидите свой журнал, где Handler (s), связанные с вашим Logger, сгенерируют указанный журнал (в Console или в Stream ...).
Конфигурация по умолчанию устанавливает один обработчик в корневом логгере для отправки вывода на консоль.

Уровень записи :

Каждое сообщение журнала имеет связанный уровень журнала. Уровень дает приблизительное руководство по важности и срочности сообщения журнала. Объекты уровня журнала инкапсулируют целочисленное значение, причем более высокие значения указывают на более высокие приоритеты.

Класс Level определяет семь стандартных уровней журнала, начиная от FINEST (самый низкий приоритет, с самым низким значением) до SEVERE ( самый высокий приоритет, с самым высоким значением ).

1 голос
/ 12 июня 2010

Куда это приведет, зависит от вашей конфигурации.Подробная информация об этом содержится в документации по API.Уровень журнала точно соответствует тому, что вы сказали.Если у вас есть конфигурация FINE, все, что является FINE, WARNING, SEVERE, будет отображаться, но если у вас будет установлено значение SEVERE, то появятся только те.

В общем, вы должны использовать FINE во время отладки и переключитесь на SEVERE, когда он находится в производственной среде.

...