Java 如何删除J2SE/J2EE应用程序中的日志调用(非Android)
我知道使用Proguard删除记录器调用适用于Android应用程序 如何在标准Java应用程序中实现这一点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")
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用户的经验教训:仔细检查您的类/接口方法签名!