2016-07-15 11 views
0

私はデバッグログ(デバッグビルド)のファンです。カスタムロガークラスをいくつか改良したいと思います。理想的には、呼び出すクラス名、メソッド名、およびパラメータ値を記録する基本メソッドを作成したいと考えています。Androidの自動ログイン

たとえば、「MainActivity」クラスのアプリケーション「MyApplication」があり、パラメータ「bar」を使用してメソッド「foo」を呼び出しているとします。手動でこれらの値のすべてに合格しなくても、この情報を取得する方法はあり

D/MyApplication MainActivity foo("bar")

:私はLogCatでこのような何かを見たいのですが? java.lang.invoke.MethodHandlesなどのJavaでサポートされているメソッドを参照している記事がありますが、Androidでサポートされているメソッドについては何も見つかりませんでした。パラメータを渡す必要があると思いますが、クラス名とメソッド名を自動化すると優れています。

答えて

2

Thread.currentThread().getStackTrace()を呼び出すと、現在のスレッドのStackTraceElementが表示されます。 getClassName()getMethodName()getLineNumber()を呼び出して、クラス、メソッド、およびコード行を出力することができます。これはコードの中でこのように見えます。

StackTraceElement ste = Thread.currentThread().getStackTrace()[0]; 
String msg = ste.getClassName() + "." + ste.getMethodName() + ":" + ste.getLineNumber(); 
+0

ありがとう@ChrisStillwell、私はこのような答えを見て、私の質問にそれを含める必要があります。これに対する私の質問は、[3]は何を表していますか?私は[0]と[1]で回答を見ましたが、どのスタックトレース要素が信頼できるのか分かりません。 – lgdroid57

+0

'[3]'はプロジェクト内で使用できるライブラリから貼り付けたものです。基本的に 'getStackTrace()'は 'StackTraceElement'の配列を返します。配列の一番上はスタックトレースの一番上(つまり、これが呼び出される場所)です。配列全体をトレースしたい場合は、完全な階層構造の呼び出しを得ることができます。例外がスローされたときに取得するスタックトレースと同じです。 – ChrisStillwell

+0

基本的には、 'SomeMethod()'の15行目で例外をスローすると、 'Thread.currentThread()。getStackTrace()'を呼び出すと印刷できるスタックトレースと同じものが表示されます'SomeMethod()'の中で15。 – ChrisStillwell