如何完全禁用JAudioTagger日志记录器

7

我已经使用JAudioTagger库两年了,但我不知道如何禁用它的日志记录。

我也询问过该项目的所有者: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();

我已经搜索了所有的网络,两年来一直找不到解决方案……所以我在这里提问。


解决方案 2018年6月27日 对于感兴趣的人 :)

static {

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

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

哈哈,以前我不怎么有耐心,在我的代码中分叉了这个库并删除了所有日志记录。它的速度提高了一倍:)但这不是推荐的解决方案。 - Denis Tulskiy
2个回答

3

您需要保持对日志记录器的强引用。否则,当记录器被垃圾回收时,您的级别更改将被忽略。

记录器名称需要与JAudioTagger中使用的记录器名称匹配。您可以通过查看源代码找到记录器名称。否则,更改SimpleFormatter的格式以包括记录器名称,即%3$s(javadoc有误)。运行程序时,这将列出您需要关闭的记录器名称。

使用格式化程序测试程序来确保您的格式属性已正确配置。您的模式可以像上面的模式一样简单,也可以是更详细的内容,如%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也可以列出所有活动的记录器。


非常好的回答 :) 你能提供一些SimpleFormatter的代码吗?我有点像O_o。例如,我想知道所有记录器的名称,但是我得到的是'' ''空格。 - GOXR3PLUS

2
您可以为在jaudiotagger库中使用的java.util.logging定义配置。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接