2013-06-03 4 views
7

私はスレッド名とロガー名を微調整したいので、私はLogback用のCustomLayoutを書いています。ログバックのドキュメントには、ログバックカスタムレイアウトからスタックトレースをプリントする方法は?

があります。上記の例では、doLayoutメソッドはイベントに含まれるすべての例外を無視します。実際のレイアウトの実装では、おそらく例外の内容も印刷したいと思うでしょう。

もちろん、デフォルトの実装ではスタックトレースを出力したいと思います。しかし、私はそうするための指示を見つけることができません。私はソースをダウンロードして見回しました。次のように動作しているようです:

/** 
* How much stack to print if there's an exception. 
*/ 
private List<String> stackOptionList = Arrays.asList("full"); 

@Override 
public String doLayout(ILoggingEvent event) { 
    StringBuffer sbuf = new StringBuffer(128); 
    . . . 
    IThrowableProxy proxy = event.getThrowableProxy(); 
    if (proxy != null) {  
    ThrowableProxyConverter converter = new ThrowableProxyConverter(); 
    converter.setOptionList(stackOptionList); 
    converter.start(); 
    sbuf.append(converter.convert(event)); 
    sbuf.append(CoreConstants.LINE_SEPARATOR); 
    } 
    . . . 
    return sbuf.toString(); 
} 

より良い/より承認された方法がありますか?

答えて

5

ThrowableProxyConverterは、スタックトレースを印刷する方法です。したがって、使用するコードは見栄えがよくなります。しかし、CustomLayoutを書く代わりに、custom convertersでPatternLayoutを適用することができます。大多数の場合、それはより簡単で良いオプションです。

+0

良い点 - カスタムコンバータははるかにクリーンです。ありがとう! – vanmelle

+0

@ceki doLayoutごとに新しいThrowableProxyConverterを作成、開始、停止する必要がありますか? – Ittai

関連する問題