【发布时间】:2010-12-02 08:56:23
【问题描述】:
我即将完成我的 Android 应用程序。最后我发现我一直在使用一堆日志语句,比如:
Log.d(TAG, "Blah-blah");
问题是:对于生产版本,我应该如何处理它们?
- 只需评论/删除日志语句
- 做其他更复杂的事情吗?就像我以前对 Log4J 属性所做的那样
请分享您的经验。
【问题讨论】:
我即将完成我的 Android 应用程序。最后我发现我一直在使用一堆日志语句,比如:
Log.d(TAG, "Blah-blah");
问题是:对于生产版本,我应该如何处理它们?
请分享您的经验。
【问题讨论】:
您可以使用混淆工具在构建时删除日志记录语句。详情请见here。
【讨论】:
有一个新项目可以在 android 上启用 log4j。在 slf4j 上使用 lo4gj 是可能的。它还为 LogCat 提供了一个附加程序。参见项目android-logging-log4j 或log4j support in android
【讨论】:
我为此特定目的创建了一个库。可以在这里找到 - LumberJack。您可以使用 Jitpack 和 gradle 安装它(请查看README.md)。
安装后,您必须将所有 Log 调用更改为 LumberJack 调用(例如,LumberJack.d() 而不是 Log.d() 等)
标签是可选的,默认设置为“LumberJack”。您可以选择自己设置默认标签。
您可以随时使用LumberJack.setLogLevel() 方法更改过滤。要删除所有日志,您只需将LogLevel 设置为LogLevel.None。
LumberJack.setLogLevel(LogLevel.None);
因此,如果您只想删除所有 logcat 垃圾邮件日志,您只需设置日志级别过滤器。
您可以选择使用相同的过滤机制登录到文本文件而不是 logcat。
【讨论】:
我这样做,如果 DEBUG 为 false,则让编译器删除所有日志记录:
if (Constant.DEBUG) Log.d(TAG, "mein gott, state is roflcopter");
【讨论】:
视情况而定。如果您希望应用程序经常崩溃,那么例如包含其中一个崩溃报告库,但无论您决定做什么,都不要使用 Log.d() 方法发布它。
【讨论】:
我没有专门在 Android 上体验过,但我只是将日志记录保留在代码中,并在 log4j 属性文件中关闭日志记录。您甚至可能希望打开一些日志记录,以便您的应用在发生崩溃时生成有用的日志。
如果您担心日志语句生成过于计算密集(例如,在大集合上调用 toString),那么您可以使用这种模式。
if (Log.isDebugEnabled()) {
Log.Debug(bigCollection.toString());
}
【讨论】:
如果您不想在 Android 发布版本中记录某些内容,可以使用自动生成的 BuildConfig。在此处查看更多信息:https://developer.android.com/studio/build/gradle-tips.html。您还可以阅读此问题的更多信息:BuildConfig file in android - Purpose and Possibilities。
因此,在您的代码中,您只需编写如下内容:
if (BuildConfig.DEBUG) {
//your code just for development goes here
}
【讨论】: