我假设大多数人都知道android.util.Log所有日志记录方法都接受'String tag'作为第一个参数.
我的问题是你通常如何在应用程序中标记日志? 我见过这样的硬编码:
public class MyActivity extends Activity {
private static final String TAG = "MyActivity";
//...
public void method () {
//...
Log.d(TAG, "Some logging");
}
}
Run Code Online (Sandbox Code Playgroud)
由于许多原因,这看起来不太好:
是否有任何巧妙的方法来获得课程的TAG?
gia*_*npi 166
我使用TAG,但我将其初始化为:
private static final String TAG = MyActivity.class.getName();
Run Code Online (Sandbox Code Playgroud)
这样,当我重构代码时,标记也会相应地改变.
Yan*_*niv 15
我通常创建一个App位于不同包中的类,并包含有用的静态方法.其中一种方法是一种getTag()方法,这种方式我可以随处获得TAG.
Appclass看起来像这样:
编辑:改进每个暴民评论(谢谢:))
public class App {
public static String getTag() {
String tag = "";
final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
for (int i = 0; i < ste.length; i++) {
if (ste[i].getMethodName().equals("getTag")) {
tag = "("+ste[i + 1].getFileName() + ":" + ste[i + 1].getLineNumber()+")";
}
}
return tag;
}
}
Run Code Online (Sandbox Code Playgroud)
当我想使用它时:
Log.i(App.getTag(), "Your message here");
Run Code Online (Sandbox Code Playgroud)
getTag方法的输出是调用者类的名称(包名称),以及getTag调用它的行号,以便于调用.
Nic*_*ini 10
转到Android Studio - >首选项 - >实时模板 - > AndroidLog然后选择Log.d(TAG,String).
在模板文本替换中
android.util.Log.d(TAG, "$METHOD_NAME$: $content$");
同
android.util.Log.d("$className$", "$METHOD_NAME$: $content$");
然后单击编辑变量并在className Name列旁边的Expression列中输入className().
现在,当您键入logd它将放置的快捷方式时
Log.d("CurrentClassName", "currentMethodName: ");
Run Code Online (Sandbox Code Playgroud)
你不需要再定义TAG了.
小智 8
我喜欢改善Yaniv的答案,如果你有这种格式的日志(filename.java:XX)xx行号,你可以链接快捷方式,当出现错误时,链接方式相同,这样我可以直接到相关的行只需单击logcat即可
我把它放在我的扩展应用程序中,所以我可以在其他所有文件中使用
public static String getTag() {
String tag = "";
final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
for (int i = 0; i < ste.length; i++) {
if (ste[i].getMethodName().equals("getTag")) {
tag = "("+ste[i + 1].getFileName() + ":" + ste[i + 1].getLineNumber()+")";
}
}
return tag;
}
Run Code Online (Sandbox Code Playgroud)
截图:

| 归档时间: |
|
| 查看次数: |
52150 次 |
| 最近记录: |