LogCat にログを挿入して、クリックするとシステムによって生成されるエラー ログのようにその行にジャンプするようにしたいと考えています。
出来ますか?
見つけた:
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 + ")");
}
その使用法:
showLogCat("tag", "message");
"(X:Y)"
重要なことは、ログ メッセージに挿入することです。 whileX
は目的のファイル名で、Y
は目的の行番号ですX
。 (@breceivemailの回答から学びました)。だから試してください:
public static void log(final String tag, final String msg) {
final StackTraceElement stackTrace = new Exception().getStackTrace()[1];
String fileName = stackTrace.getFileName();
if (fileName == null) fileName=""; // It is necessary if you want to use proguard obfuscation.
final String info = stackTrace.getMethodName() + " (" + fileName + ":"
+ stackTrace.getLineNumber() + ")";
Log.LEVEL(tag, info + ": " + msg);
}
注:LEVEL
はログ レベルで、、、、、v
またはのいずれd
かi
です。w
e
wtf
log(tag, msg)
の代わりに使用できるようになりLog.LEVEL(tag, msg)
ました。
例:
MainActivity.java :
...
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
log("Test Tag", "Hello World!");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
...
出力:
12-30 14:24:45.343 ? I/Test Tag: onCreate (MainActivity.java:10): Hello World!
MainActivity.java:10
自動的にリンクが作成され、クリックすることができます!
info
より詳細なログが必要な場合は、変数に次の値を割り当てることもできます。
final String info = stackTrace.getClassName() + "." + stackTrace.getMethodName() + " ("
+ fileName + ":" + stackTrace.getLineNumber() + ")\n";
したがって、上記の例の出力は次のようになります。
12-30 14:33:07.360 ? I/Test Tag: com.example.myapp.MainActivity.onCreate (MainActivity.java:11)
Hello World!
はい、できます.. SO - ロギングで回答された例に従ってください