【问题标题】:Android Studio, delete all logs quickly from projectAndroid Studio,从项目中快速删除所有日志
【发布时间】:2016-12-01 15:34:44
【问题描述】:

当我处理大型项目时,我经常在开发分支中使用日志。但我不想在发布/主分支中有日志。当我做一些卡片时,我会根据任务的难度使用 10-50 个日志。 删除不同类别的50条日志需要2-5分钟。与完成任务的时间相比并不算多,但我想减少这个时间。

例如我有这样的日志:

Log.d(TAG, "Method: constantScrolling");

....

Log.d(TAG, "constantScrolling 2609 scrollTimer.cancel");

它们都有相同的开头 - Log.d(TAG

要查找要删除的所有日志,我使用以下命令:在 java 类 Ctrl+F -> 插入 Log.d(TAG -> 向下按箭头 -> 按 Ctrl+Y 在每个日志上。 所以,我快速删除了所有以相同开头 Log.d(TAG

有没有办法更快地做到这一点? 例如,如果有一些相等的字符串要删除,我可以使用:右键单击应用程序 -> 在路径中替换.. -> 要查找的文本:Log.d(TAG, "Method: constantScrolling"); -> 替换为:(空)-> 查找 因此,在几秒钟内,我可以删除整个项目中的相等字符串。 也许有一些组合可以删除具有相同开头的字符串?

【问题讨论】:

  • 您不能将日志语句留在代码中并将日志框架配置为不发出调试级别的日志吗?在生产和测试中配置不同日志记录参数的能力是几乎每个日志记录框架的主要功能之一。

标签: java android logging


【解决方案1】:

我的方式:

1) 启用列选择模式 (alt+shift+insert)

2) 选择一个 LOG.d(TAG, "text"); “日志”部分。

3) 然后做shift + ctrl + alt + j

4)点击左箭头

5) shift+end

6)点击删除。

这会立即删除 java 文件中的所有 LOG 调用。

【讨论】:

    【解决方案2】:

    您可以在构建发布时使用 ProGuard 删除日志。只需将以下内容添加到您的proguard-rules.pro

    -assumenosideeffects class android.util.Log {
        public static boolean isLoggable(java.lang.String, int);
        public static int v(...);
        public static int i(...);
        public static int d(...);
    }
    

    这将在您构建发布时删除日志。显然,确保你有 proguard on release 和 off for debug。此外,这会将您的错误日志保留在应用程序中,因为无论如何您可能都想要这些日志。

    【讨论】:

    • 感谢您的建议,但我需要另一件事:我在某个分支中做了一些卡片,然后将其合并到公共分支,通常在 dev 或 release 或 master 分支中,我不想要日志从某个 feature_branch 转到 common 分支。
    【解决方案3】:

    我会这样做:

    1. 右键点击应用
    2. 在路径中替换
    3. 查找:“Log.d(”(或您需要的任何内容)
    4. 替换为:“”
    5. 查找

    【讨论】:

    • 它不起作用,因为只替换删除日志的开头。例如,如果我按照你写的那样做并替换这个“Log.d”,结果将是日志结束:在替换 Log.d(TAG, "Method: constantScrolling"); 之前之后(标签,“方法:常量滚动”);这并不好。不是删除日志,只是减少日志并出错。
    【解决方案4】:

    我将给出我在 C++ 中所做的 Java 等价物:

    class MyLog {
        static int d( String t, String m ) { return Log.d(t,m); }
        // static int d( String t, String m) { return 0; }
        static dx( String t, String m ) { return 0; }
    
        static int v( String t, String m ) { return Log.d(t,m); }
        // static int v( String t, String m) { return 0; }
        static vx( String t, String m ) { return 0; }
    
        ...
    }
    

    在我的程序中我使用:

    MyLog.d(TAG, "消息");

    现在,如果我想完全禁用日志记录,那么我可以转到 MyLog 类并简单地注释掉第一个(真实)条目,然后取消注释虚拟行。如果我想禁用特定条目,请将“.d”更改为“.dx”,日志条目将保留在源中,以备日后启用。

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多