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

时间:2014-02-19 14:26:30

标签: 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配置中,我有以下内容:

-assumenosideeffects class java.util.logging.Logger { *; }
-whyareyoukeeping class java.util.logging.Logger

在运行时给出以下输出:

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

据我所知,这是一个图书馆,但我想要删除所有调用它。 Proguard可以实现吗?如果没有,为什么?为什么这对Android来说如此方便?记录器领域或缺少它与此有什么关系?

1 个答案:

答案 0 :(得分:1)

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

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

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