【发布时间】:2015-03-29 08:51:41
【问题描述】:
我创建了一个 Logger 类,我在其中放置了一个字符串和日志级别。 该行如下所示:
Logger.log("The error is" + err , Logger.DEBUG);
我想删除所有在发布版本中使用 Logger.DEBUG 日志级别的 Logger.log 消息。 目前我还没有找到使用 gradle 来做到这一点的技巧。 我也尝试使用 proguard -assumenosideeffects 但我找不到为所有项目提交它的确切规则。 Proguard 说:
您可以让 ProGuard 删除日志记录代码。诀窍是指定 日志记录方法没有副作用——即使它们 实际上是这样做的,因为它们会写入控制台或日志文件。 ProGuard 会相信你的话并删除调用(在 优化步骤),如果可能的话,记录类和方法 自己(在缩小步骤中)。
【问题讨论】:
-
您真的需要删除这些行还是只是想确保它们没有被执行?如果日志级别未设置为 ERROR、FATAL 等,则有像
slf4j这样的第 3 方库“忽略”您的日志语句(意味着它们没有创建您的日志字符串)。 -
我想删除它,因为如果我不执行命令,函数中会出现一个字符串追加事件。
-
如果不是太费时,我会把它切换到
slf4j。它们允许您使用参数化消息进行日志记录,如果未给出日志级别,则避免字符串附加。这样您可以使用logger.debug("The error is {}", err)。仅当级别为debug时才会执行字符串 concat。如果你不能切换,那么对不起,如果这是题外话:)
标签: java logging proguard android-gradle-plugin