Suppress java util logging from 3rd party jar

2019-02-21 02:50发布

I am getting tons of info log messages from a 3rd party jar in my eclipse console. Cracking open the jar I see that it uses java.util.logging. I would like to set the output level for their jar to WARNING.

I have tried using the VM argument of -Djava.util.logging.config.file=pathToMy/JUL.properties where the contents of the file are:

handlers=java.util.logging.ConsoleHandler
.level=WARNING
java.util.logging.ConsoleHandler.level=WARNING

Unfortunately, that made no difference in the output.

If it makes it any easier, my application uses SLF4J. So if there's a simple answer using a different logging mechanism I can just switch my binding to use it.

3条回答
姐就是有狂的资本
2楼-- · 2019-02-21 03:05

Before decompile the jar to find how to set Log level you can try to search the setLogLevel api for which component you want debug more.

enter image description here

setLogWriter(new PrintWriter(System.out));

查看更多
手持菜刀,她持情操
3楼-- · 2019-02-21 03:07

I think you may have the following snippet useful. It will allow you to set the log behaviour at package level:

Logger logger = Logger.getLogger("org.apache.axiom");
logger.setLevel(Level.WARN);
查看更多
▲ chillily
4楼-- · 2019-02-21 03:12

Have you used JConsole to determine that:

  1. The VM Summary tab shows that the system property 'java.util.logging.config.file' is set.
  2. The MBean tab->java.util.logging->Operations->getLoggerLevel of blank (no value) returns WARNING.
  3. The MBean tab->java.util.logging->Attributes->LoggerNames contains the list of active 3rd party loggers which can be added to your list of things to disable. The loggers will only be listed if the executing code has created them. Anonymous loggers are not listed but, the default settings are inherited from the root logger.

You can also add the following code to check that your config file is working:

    public static void main(String[] arg) throws Exception {
        String p = System.getProperty("java.util.logging.config.file");
        System.out.println(p);
        System.out.println(new File(p).length());
        System.out.println(Logger.getLogger("").getLevel());
    }
查看更多
登录 后发表回答