Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除J2SE/J2EE应用程序中的日志调用(非Android)_Java_Logging_Proguard - Fatal编程技术网

Java 如何删除J2SE/J2EE应用程序中的日志调用(非Android)

Java 如何删除J2SE/J2EE应用程序中的日志调用(非Android),java,logging,proguard,Java,Logging,Proguard,我知道使用Proguard删除记录器调用适用于Android应用程序 如何在标准Java应用程序中实现这一点 import java.util.logging.Logger; public class Clazz { private static final Logger LOGGER = Logger.getLogger(Clazz.class.getName()); public void foo() { LOGGER.info("bar")

我知道使用Proguard删除记录器调用适用于Android应用程序

如何在标准Java应用程序中实现这一点

import java.util.logging.Logger;

public class Clazz {

      private static final Logger LOGGER = Logger.getLogger(Clazz.class.getName());

      public void foo() {
          LOGGER.info("bar");
      }

}
在Proguard配置中,我具有以下功能:

-assumenosideeffects class java.util.logging.Logger { *; }
-whyareyoukeeping class java.util.logging.Logger
它在运行时提供以下输出:

 [proguard] java.util.logging.Logger
 [proguard]   is a library class.

我知道这是一个图书馆,但我还是想取消对它的所有调用。Proguard可以这样做吗?若否,原因为何?为什么这对Android来说如此方便,logger字段或缺少它与此有关吗?

假设您没有禁用优化功能,您应该能够删除这样的日志调用——这是删除不必要和不需要的调用的优化步骤。ProGuard无法删除Logger类本身,因为正如您所看到的,它是一个运行时库类

但是,不能使用通配符来匹配这些方法,因为这包括wait()和finalize()等基本方法(影响所有类)。您必须枚举要删除的方法。例如:

-assumenosideeffects class java.util.logging.Logger {
    void info(java.lang.String);
}

谢谢我们使用的是一个自定义日志接口,它扩展了org.slf4j.Logger。实际的日志调用是在该接口上进行的,而不是在Proguard配置中指定的自定义接口。作为Proguard用户的经验教训:仔细检查您的类/接口方法签名!