如何完全禁用JAudioTagger Logger

时间:2018-06-09 20:53:28

标签: java logging java.util.logging jaudiotagger

现在已经使用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);
}

2 个答案:

答案 0 :(得分:3)

你必须hold a strong reference to your loggers。否则,当记录器被垃圾收集时,将忽略您的级别更改。

记录器名称需要与JAudioTagger中使用的记录器匹配。您可以通过查看源代码找到记录器名称。否则,请更改format of the SimpleFormatter以包含%3$s %1$tH:%1$tM:%1$tS.%1$tL - [%3$s] -[%4$s] %5$s%n(javadocs关闭一个)。运行程序时,将列出需要关闭的记录器名称。

使用logger name确保正确配置格式属性。您的模式可以像上面的模式一样简单,也可以像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()); } } }

那样具有更多细节

另一种选择是在程序退出之前添加代码以列出所有记录器。

{{1}}

formatter test program还可以列出所有活动记录器。

答案 1 :(得分:0)

您可以为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