在 Android Studio/Intellij IDEA 中自动生成 Android Log TAG

Posted

技术标签:

【中文标题】在 Android Studio/Intellij IDEA 中自动生成 Android Log TAG【英文标题】:Auto-generate Android Log TAG in Android Studio/Intellij idea 【发布时间】:2015-06-05 09:08:13 【问题描述】:

在 Intellij Idea 中,当我输入 psfs 然后按 Ctrl+J IDE 给我一个对话框:

当我按下 Enter 我得到一个

我知道在哪里可以自定义我自己的输出

但我无法提供任何文档说明如何编写自己的实时模板。

最后我想得到下一个结果:

键入:psfst -> 按 Ctrl+J -> 按 Enter

结果:

public static final String TAG = <currentClassName>.class.getSimpleName();

这会很有帮助,因为我有记录我的课程的习惯。

【问题讨论】:

【参考方案1】:

android Studio 中超级简单,只需输入 logt 并按 Tab

它生成:private static final String TAG = "xyzActivity";

【讨论】:

【参考方案2】:

对于 Kotlin,使用 private val TAG = $CLASS_NAME$::class.java.simpleName 作为模板文本并在 CLASS_NAME 的集合表达式中作为编辑变量中的 kotlinClassName()。

【讨论】:

【参考方案3】:

对于使用 Android Studio 3Kotlin 的用户,有必要更改 Live Templates 的设置方式:

编辑器 >> 实时模板 >> AndroidLog

默认情况下仅适用于 Java

按“更改”按钮添加 Kotlin 并检查 Kotlin

然后它会再次工作!


更新日期: 2020

Android Studio: 3.6.2

步骤:

    添加 调用 logtk 是你想调用的任何东西 将此代码用作模板文本
private val TAG = this::class.java.simpleName
    添加说明 它是否适用于 Kotlin:在我的例子中,我只用于 Class

2020 年 6 月更新

不再需要设置任何东西。 Android Studio 4.0 默认带有这个功能。 Toast 也一样

【讨论】:

【参考方案4】:

Android Studio 中已经存在这样的快捷方式 - 在光标位于类范围时写入 logt 并输入。

更多:

【讨论】:

不完全是。它将生成模板为private static final String TAG = "<class_name>"; 未请求。但我会加分,因为这对它来说是 0.02 美元。【参考方案5】:

另一种解决方案是不为每个类使用默认的 TAG,而是使用这种方法来获取 TAG:

public class Utils 
        public static String getTAG(Object o) 
            StackTraceElement[] elements = Thread.currentThread().getStackTrace();

            int position = 0;
            for (int i = 0; i < elements.length; i++) 
                if (elements[i].getFileName().contains(o.getClass().getSimpleName())
                        && !elements[i+1].getFileName().contains(o.getClass().getSimpleName()))
                    position = i;
                    break;
                
            

            StackTraceElement element = elements[position];
            String className = element.getFileName().replace(".java", "");
            return "[" + className + "](" + element.getMethodName() + ":" + element.getLineNumber() + ")";
        

来自 MainActivity 的示例调用 - onResume:

Log.v(Utils.getTAG(this), "hello world");

日志输出:

[MainActivity](onResume:79): hello world

【讨论】:

其实不是关于自动生成TAG的答案。【参考方案6】:

我找到了解决办法

1) 在普通组中创建一个新的实时模板2) 在模板文本中:

private static final String TAG = $CLASS_NAME$.class.getSimpleName();

3)定义使用范围:

4) 选择快捷方式:

最后点击Edit variables并将表达式值改为className()

点击OkApplyOk并使用。

【讨论】:

很棒的提示。作为建议,您可以使用 private 而不是 public,因为您为每个类设置了一个标签。 我已通过此解决方案中提出的模板修改了logt 的默认模板。这真的是我想要的,也是应该实施的方式。谢谢! @SergeyShustikov Kotlin 呢? 这应该包含在 Android Studio 中

以上是关于在 Android Studio/Intellij IDEA 中自动生成 Android Log TAG的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Studio/Intellij IDEA 中自动生成 Android Log TAG

Android studio / IntelliJ构建窗口自动显示

如何在 Android Studio / IntelliJ Idea 中添加字典进行拼写检查

使用基于 Gradle 的配置时在 Android Studio (IntelliJ) 上运行简单的 JUnit 测试

在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它

Android - 在 Android 1.6 中开发的应用程序可以在 Android 2.0 中运行吗?