Как я могу установить отдельные уровни журнала в разных классах Java?

(Я новичок в Java, и я прочитал java.util.logging: как установить уровень с помощью пакета логгера (или префикса)? Уже. Поскольку он не мог ответить на мой вопрос, вот он)

Я разрабатываю систему, которая имеет private static final Logger log = Logger.getLogger(XXX.class.getName()); атрибуты в нескольких классах (XXX будучи соответствующим классом).

я использую log.setLevel(level) с разными levelс, но все log объекты, кажется, работают на том же уровне журнала. Печать log само по себе, кажется, указывает на то, что человек log объекты на самом деле одинаковы. Я не понимаю почему.

Отладочный вывод выглядит так:

[CONFIG ]...Parser init: java.util.logging.Logger@6bc7c054 logging level FINE
[CONFIG ]...Tokenizer init: java.util.logging.Logger@6bc7c054 logging level CONFIG

И все же Parser журналы классов на уровне CONFIG...

2 ответа

Решение

Печать самого журнала, кажется, указывает, что отдельные объекты журнала фактически одинаковы. Я не понимаю почему.

Parser а также Tokenizer звонят Logger.getLogger(XXX.class.getName()); с тем же именем XXX учебный класс. Измените пример кода, чтобы напечатать имя регистратора.

Отладочный вывод выглядит так

В этом мне помогает пример Minimal, Complete и Verifiable. Уровни используются для квалификации сообщений, а уровни используются для фильтрации сообщений. Если вы не включите хотя бы код, который выдает выходные данные отладки, трудно сказать, что означает значение для каждого уровня в списке.

Вы, кажется, путаете уровень фильтрации Logger и уровень регистрации сообщений.

Каждый регистратор имеет уровень ведения журнала, который действует как фильтр для сообщений; сообщения, которые регистрируются на уровне, который ниже уровня фильтрации регистратора, игнорируются.

Вот пример (не фактический код):

Logger myLogger = Logger.getLogger("somename");
myLogger.setLevel(FINE);

myLogger.fine("fine grained log message");
myLogger.finest("finest level of logging");
myLogger.info("info level message");
myLogger.fine("second fine message");

Приведенный выше "код" выдаст следующие сообщения в файле журнала:

fine grained log message
info level message
second fine message

Обратите внимание, что сообщение "лучший уровень ведения журнала" не будет отображаться в журнале, потому что FINEST уровень ниже чем FINE и таким образом фильтруется регистратором.

Другие вопросы по тегам