如何完全禁用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);

现在我只是从应用程序中禁用了记录器,但我需要它,我该怎么办?控制台几乎无法使用,因为有大量的 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);
}

你必须对你的记录器有一个强有力的引用。 否则,当记录器被垃圾回收时,将忽略您的级别更改。

记录器名称需要与 JAudioTagger 中使用的记录器匹配。 您可以通过查看源代码来查找记录器名称。 否则,更改SimpleFormatter的格式以包含%3$s的记录器名称(javadocs 相差 1(。 当您运行程序时,这将列出您需要关闭的记录器名称。

使用格式化程序测试程序确保正确配置了格式属性。 您的模式可以像上面的模式一样简单,也可以像%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还可以列出所有活跃的记录器。

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

最新更新