Как полностью отключить JAudioTagger Logger

Я использую библиотеку JAudioTagger уже 2 года, я не могу понять, как отключить ее.

Также спросил владельца проекта: https://bitbucket.org/ijabz/jaudiotagger/issues/257/how-to-disable-jaudio-tagger-logger

Что я пробовал? (Неудачно)

Logger.getLogger("org.jaudiotagger").setLevel(Level.OFF);
Logger.getLogger("org.jaudiotagger.tag").setLevel(Level.OFF);
Logger.getLogger("org.jaudiotagger.audio.mp3.MP3File").setLevel(Level.OFF);
Logger.getLogger("org.jaudiotagger.tag.id3.ID3v23Tag").setLevel(Level.OFF);

На данный момент я просто отключил Logger вообще из приложения, но мне это нужно, что я могу сделать? Консоль практически непригодна из-за множества сообщений JAudioTagger.

Временное решение (мне нужен регистратор для приложения, хотя...)

LogManager.getLogManager().reset();

Я искал всю сеть, я не могу найти решение, как это было 2 года... вот почему я спрашиваю здесь.


Решение 27/06/2018 Для интересующихся:)

static {

    //Disable loggers               
    pin = new Logger[]{ Logger.getLogger("org.jaudiotagger") };

    for (Logger l : pin)
        l.setLevel(Level.OFF);
}

1 ответ

Решение

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

Имя регистратора должно соответствовать регистратору, используемому в JAudioTagger. Вы можете найти имена регистраторов, просмотрев исходный код. В противном случае измените форматSimpleFormatter включить имя регистратора, который %3$s (Javadocs отключены одним). Когда вы запустите свою программу, в ней будут перечислены имена регистраторов, которые вам нужно отключить.

Используйте тестовую программу форматирования, чтобы убедиться, что свойство форматирования настроено правильно. Ваш шаблон может быть таким же простым, как приведенный выше шаблон, или чем-то более подробным, например %1$tH:%1$tM:%1$tS.%1$tL - [%3$s] -[%4$s] %5$s%n

Другой вариант - добавить код в список всех регистраторов непосредственно перед выходом из программы.

private static void findFormatters() {
    final LogManager manager = LogManager.getLogManager();
    synchronized (manager) {
        final Enumeration<String> e = manager.getLoggerNames();
        while (e.hasMoreElements()) {
            System.out.println(e.nextElement());
        }
    }    
}

JConsole также может перечислить все активные регистраторы.

Вы можете определить конфигурацию для java.util.logging, используемого в библиотеке jaudiotagger

static {
    java.util.logging.LogManager manager = java.util.logging.LogManager.getLogManager();
    try {
        manager.readConfiguration(new FileInputStream("audioLogger.properties"));
    } catch (IOException ignored) {}
}

а затем настройте ведение журнала в указанном файле свойств

handlers=java.util.logging.ConsoleHandler
org.jaudiotagger.level=OFF
Другие вопросы по тегам