15

LogCat にログを挿入して、クリックするとシステムによって生成されるエラー ログのようにその行にジャンプするようにしたいと考えています。

出来ますか?

4

6 に答える 6

15

見つけた:

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");
于 2012-05-15T10:57:22.083 に答える
4

"(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またはのいずれdiです。wewtf

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!    
于 2016-12-30T11:09:13.543 に答える
0

はい、できます.. SO - ロギングで回答された例に従ってください

于 2012-05-15T09:44:14.110 に答える