java.util.logging. Регистратор не уважает java.util.logging. Уровень?

49
задан Arjan Tijms 19 May 2013 в 00:19
поделиться

3 ответа

Даже при том, что уровень Регистратора установлен на ВСЕ, ConsoleHandler (Обработчик по умолчанию на регистраторе) все еще имеет уровень по умолчанию ИНФОРМАЦИИ. Это прибывает из значения по умолчанию logging.properties в JAVA_HOME/jre/lib

55
ответ дан Kevin 7 November 2019 в 11:32
поделиться

Вместо того, чтобы перебирать все обработчики и устанавливать уровень ведения журнала, я предпочитаю устанавливать только уровень обработчика консоли:

//get the top Logger
Logger topLogger = java.util.logging.Logger.getLogger("");

// Handler for console (reuse it if it already exists)
Handler consoleHandler = null;
//see if there is already a console handler
for (Handler handler : topLogger.getHandlers()) {
    if (handler instanceof ConsoleHandler) {
        //found the console handler
        consoleHandler = handler;
        break;
    }
}


if (consoleHandler == null) {
    //there was no console handler found, create a new one
    consoleHandler = new ConsoleHandler();
    topLogger.addHandler(consoleHandler);
}
//set the console handler to fine:
consoleHandler.setLevel(java.util.logging.Level.FINEST);
35
ответ дан 7 November 2019 в 11:32
поделиться

Человек на моем рабочем месте обнаружил следующее для работы:

public class Foo {
    private final static Logger logger = Logger.getLogger(Foo.class.getName());
    public static final void main(String[] args) {
        ConsoleHandler ch = new ConsoleHandler();
        ch.setLevel(Level.FINEST);
        Foo.logger.addHandler(ch);
        Foo.logger.setLevel(Level.FINEST);
        Foo.logger.finest("test");
    }
}

Если вы просто установите root или обработчик на лучший (исключительно), то это не сработает. Когда я устанавливаю оба параметра на FINEST , он работает. Его объяснение было таким:

И регистратор, и его обработчики имеют уровни регистрации… Порядок фильтрации - регистратор, затем обработчики. ) à сообщение останавливается фильтром регистратора и никогда не попадает в обработчик ... Ничего не выводится.

  • myLogger.info ("foo") à проходит оба фильтра и foo ].

  • Теперь ...

    • Регистратор myLogger имеет уровень FINEST и единственный ConsoleHandler myHandler , который имеет уровень FINEST

    • ] myLogger.fine ("foo") à пропускает оба фильтра и выводится " foo ".

    • myLogger.info ("foo") à пропускает оба фильтра и ] foo .

    17
    ответ дан 7 November 2019 в 11:32
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: