【问题标题】:Logging strategy日志记录策略
【发布时间】:2010-12-02 08:56:23
【问题描述】:

我即将完成我的 Android 应用程序。最后我发现我一直在使用一堆日志语句,比如:

Log.d(TAG, "Blah-blah");

问题是:对于生产版本,我应该如何处理它们?

  1. 只需评论/删除日志语句
  2. 做其他更复杂的事情吗?就像我以前对 Log4J 属性所做的那样

请分享您的经验。

【问题讨论】:

    标签: android logging


    【解决方案1】:

    您可以使用混淆工具在构建时删除日志记录语句。详情请见here

    【讨论】:

    • 好的,我会调查选项。无论如何,Log4J中有没有像属性这样的可能性?
    • 据我所知,所有消息都会被记录下来。然后日志的查看者可以选择要显示的消息。您不能通过简单地编辑属性来禁用调试消息进入日志。
    【解决方案2】:

    有一个新项目可以在 android 上启用 log4j。在 slf4j 上使用 lo4gj 是可能的。它还为 LogCat 提供了一个附加程序。参见项目android-logging-log4jlog4j support in android

    【讨论】:

    • 哇哦! Log4J 来了!非常感谢!
    【解决方案3】:

    我为此特定目的创建了一个库。可以在这里找到 - LumberJack。您可以使用 Jitpack 和 gradle 安装它(请查看README.md)。

    安装后,您必须将所有 Log 调用更改为 LumberJack 调用(例如,LumberJack.d() 而不是 Log.d() 等)

    标签是可选的,默认设置为“LumberJack”。您可以选择自己设置默认标签。

    您可以随时使用LumberJack.setLogLevel() 方法更改过滤。要删除所有日志,您只需将LogLevel 设置为LogLevel.None

    LumberJack.setLogLevel(LogLevel.None);
    

    因此,如果您只想删除所有 logcat 垃圾邮件日志,您只需设置日志级别过滤器。

    您可以选择使用相同的过滤机制登录到文本文件而不是 logcat。

    【讨论】:

      【解决方案4】:

      我这样做,如果 DEBUG 为 false,则让编译器删除所有日志记录:

      if (Constant.DEBUG) Log.d(TAG, "mein gott, state is roflcopter");
      

      【讨论】:

      • 这种方法并没有错,如果你问我,它也不是最佳实践,因为它会使你的代码膨胀。
      • 日志记录应该尽可能简单。稍后有人可能将 Log.d 更改为 Log.w,但忘记更改 Constant.DEBUG(反之亦然)。
      • 你可能有一点,一切都应该尽可能简单。但最好用一点复杂的方法来解决问题,然后什么都不做。这是我找到的最佳解决方案,因为我发现膨胀很小。
      • 编译器删除所有日志是什么意思?
      • 如果编译器看到Constant.DEBUG总是为假,就可以断定整个语句是多余的,将其删除。编译器不会删除对 Log.d() 的调用。然而,距离我回答这个问题已经过去了 6 年。我现在宁愿忽略调试日志,也不愿使用此解决方案。性能损失可以忽略不计。
      【解决方案5】:

      视情况而定。如果您希望应用程序经常崩溃,那么例如包含其中一个崩溃报告库,但无论您决定做什么,都不要使用 Log.d() 方法发布它。

      【讨论】:

        【解决方案6】:

        我没有专门在 Android 上体验过,但我只是将日志记录保留在代码中,并在 log4j 属性文件中关闭日志记录。您甚至可能希望打开一些日志记录,以便您的应用在发生崩溃时生成有用的日志。

        如果您担心日志语句生成过于计算密集(例如,在大集合上调用 toString),那么您可以使用这种模式。

        if (Log.isDebugEnabled()) {
           Log.Debug(bigCollection.toString());
        }
        

        【讨论】:

          【解决方案7】:

          如果您不想在 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
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-08
            相关资源
            最近更新 更多