2012-02-10 12 views
3

多くの場合、スタックトレースは長いクラスパスから非常に冗長になり、読みにくくなります。 ...スタックトレースの長いクラスパスを非表示にするにはどうすればよいですか?

1) No implementation for 
    Set<ItemManipulator<Cat>> annotated with @Assisted(value=) was bound. 
    while locating Set<ItemManipulator<Cat>> annotated with @Assisted(value=) 

:私は唯一のクラス名やメソッドを示す、クラスパスをトリミングすることができれば、それは次のようになり

...

1) No implementation for java.util.Set< 
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview. 
helpers.databaseitem.itemmanipulators.ItemManipulator< 
com.mydomain.myapp.flash.Cat>> annotated with 
@com.google.inject.assistedinject.Assisted(value=) was bound. 
     while locating 
java.util.Set< 
    com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview. 
    helpers.databaseitem.itemmanipulators.ItemManipulator< 
    com.mydomain.myapp.flash.Cat>> annotated with 
    @com.google.inject.assistedinject.Assisted(value=) 

:ここでは例です

私はこれを最初にGuice-specific questionと尋ねましたが、それは一般的なトレースをスタックするために適用されることに気付きました。これをネイティブに行うためにJavaやEclipseを設定する方法はありますか?そうでない場合、これを達成するためのプラグインまたは外部ツールがありますか?

答えて

0

もっと読みやすいトレースを作成するには、スタックトレースをメモ帳++と次の正規表現に貼り付けます。同じ表現をスクリプト言語で使用することもできます。

トレースをNotepad++に貼り付け、次の検索と置換設定を使用します。

検索パターン\w[a-z\d_\.]+\.([A-Z][A-Za-z\d_]*)

と交換してください:\1

を検索設定match caseは、Regular expression検索モードを有効に。

0

logbackを使用する場合は、レイアウトを使用して、 http://logback.qos.ch/manual/layouts.htmlのような方法でログを出力できます。 j.l.Stringがスタックにかなり一般的であるようjava.lang.Stringでのようなクラスを出力

はあなたがデフォルトUncaughtExceptionHandlerを設定し、System.errに印刷する前に、スタックトレースを変更することができ

2

をトレースします。正規表現を使って遊ぶ必要があるかもしれませんが、これはうまくいくでしょう:

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { 
     @Override 
     public void uncaughtException(Thread t, Throwable e) { 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      PrintStream ps = new PrintStream(baos); 
      e.printStackTrace(ps); 
      String withoutClasspaths = baos.toString().replaceAll("(\\w+\\.){2,}(\\w*)", "$2"); 
      System.err.println(withoutClasspaths); 
     } 
    }); 
関連する問題