Android 如何在LogCat中插入一个日志,当我点击它时,它会跳转到代码中的行?
我想在LogCat中插入一个日志,当我点击它时,它会跳转到它的行,就像系统生成的一些错误日志一样Android 如何在LogCat中插入一个日志,当我点击它时,它会跳转到代码中的行?,android,eclipse,logcat,Android,Eclipse,Logcat,我想在LogCat中插入一个日志,当我点击它时,它会跳转到它的行,就像系统生成的一些错误日志一样 有可能吗?使用是的,你能做到。。按照我在上找到的示例进行操作: public static void showLogCat(String tag, String msg) { StackTraceElement[] stackTraceElement = Thread.currentThread() .getStackTrace();
有可能吗?使用是的,你能做到。。按照我在上找到的示例进行操作:
public static void showLogCat(String tag, String msg) {
StackTraceElement[] stackTraceElement = Thread.currentThread()
.getStackTrace();
int currentIndex = -1;
for (int i = 0; i < stackTraceElement.length; i++) {
if (stackTraceElement[i].getMethodName().compareTo("showLogCat") == 0)
{
currentIndex = i + 1;
break;
}
}
String fullClassName = stackTraceElement[currentIndex].getClassName();
String className = fullClassName.substring(fullClassName
.lastIndexOf(".") + 1);
String methodName = stackTraceElement[currentIndex].getMethodName();
String lineNumber = String
.valueOf(stackTraceElement[currentIndex].getLineNumber());
Log.i(tag, msg);
Log.i(tag + " position", "at " + fullClassName + "." + methodName + "("
+ className + ".java:" + lineNumber + ")");
}
重要的是在日志消息中插入
(X:Y)
,而X
是您所需的文件名,Y
是您在X
中所需的行号(我从中了解到)。因此,请尝试:
公共静态无效日志(最终字符串标记,最终字符串消息){
final StackTraceElement stackTrace=新异常().getStackTrace()[1];
String fileName=stackTrace.getFileName();
if(fileName==null)fileName=“;//如果要使用proguard模糊处理,则必须这样做。
最终字符串信息=stackTrace.getMethodName()+“(“+fileName+”:”
+stackTrace.getLineNumber()+”;
日志级别(标记,信息+”:“+msg);
}
注意:级别
是日志级别,可以是v
,d
,i
,w
,e
或wtf
现在您可以使用log(tag,msg)
而不是log.LEVEL(tag,msg)
例如: MainActivity.java:
。。。
公共类MainActivity扩展了BaseActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
日志(“测试标签”,“你好世界!”);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
...
输出:
12-30 14:24:45.343?I/Test标签:onCreate(MainActivity.java:10):你好,世界!
而MainActivity.java:10
将自动成为一个,您可以点击它
如果需要更详细的日志,还可以将以下值指定给
info
变量:
final String info=stackTrace.getClassName()+“+stackTrace.getMethodName()+”(“
+文件名+“:“+stackTrace.getLineNumber()+”)\n”;
因此,上述示例的输出为:
12-30 14:33:07.360?I/Test标签:com.example.myapp.MainActivity.onCreate(MainActivity.java:11)
你好,世界!
用简单的方式回答问题:
尊敬的塞特·雷格尔:
{FileName}.{ext}:{LigneNumber}
e.g. MainActivity.java:10
下面是一个例子
Log.d(TAG, "onResume: MainActivity.java:10");
我希望这将对您有所帮助这并不是问题的答案,但也许这是一个“足够接近”的解决方法
如果搜索结果太多,可以使用live模板创建唯一的logcat条目: 创建活动模板以插入类、方法和行号(在编写时)。我使用“logi”。是的,行号会随着您继续编写而变得越来越不准确,但它仍然可以作为一种使日志条目更“可查找”的方式
请将这棵树与木材一起使用
class MyLinkingTimberTree : Timber.DebugTree() {
override fun createStackElementTag(element: StackTraceElement): String? {
return makeClickableLineNumber(element)
}
private fun makeClickableLineNumber(
element: StackTraceElement
): String {
val className = element.fileName
val methodName = element.methodName
val lineNumber = element.lineNumber
val fileName = element.fileName
val stringBuilder = StringBuilder(className)
.append(".")
.append(methodName)
.append(" (")
.append(fileName)
.append(":")
.append(lineNumber)
.append(") ")
return stringBuilder.toString()
}
}
然后像这样实例化它:
class MyApplication: Application() {
override fun onCreate() {
super.onCreate()
if(BuildConfig.DEBUG) {
Timber.plant(MyLinkingTimberTree())
}
}
}
然后,正常使用木材:
Timber.d("Currently Signed in:")
这就是结果。很好,不是吗?我希望你喜欢使用它,就像我喜欢制作它一样
跳转到该行没有任何意义如果我从activity或fragment以外的其他位置调用您的方法,它会在StackTraceeElement[currentIndex].getClassName()上提供ArrayIndexOutOfBoundsException;
Timber.d("Currently Signed in:")