2016-03-23 2 views
0

私のJavaアプリケーションでは、ログはフレームワークとして使用されます。 (簡略化)次のパターンで構成されたアペンダは:一つは見ることができるようにいくつかの条件で動的にログエントリパターンを変更

[CORR=%X{CORR}] [MSG=%msg]%n 

CORR値はMDCから取られます。エントリの例をログ:

[CORR=12342314] [MSG=Some message] 

がある属性がMDCに格納されていない場合場合がありますので、エントリをログに記録することは次のようになります。

[CORR=] [MSG=Some message] 

しかし、次のようになります。

[MSG=Some message] 

は、任意のはありますこのパターンを完全に取り除く方法[CORR=]MDCに対応する値がない場合は、カスタムを作成せずにLayoutBase im plementations? 私は評価を設定しようとしている:

<evaluator name="DISPLAY_CORR_EVAL"> 
    <expression>((String) mdc.get("CORR")) != null</expression> 
</evaluator> 

が、私の場合はそれを使用する方法が分かりません。

+0

カスタムレイアウトが可能である必要があります。http://logback.qos.ch/manual/layouts.html –

+0

カスタムレイアウトのないソリューションが見つかりました。 – Aliaxander

答えて

3

問題はLogback replace(p){r, t}変換単語の助けを借りて解決された:

サブパターンによって生成 ストリング中のその置換「T」とR「」、正規表現の出現を置換P」 'たとえば、 "%replace(%msg){'\ s'、 ''}"は、 イベントメッセージに含まれるすべてのスペースを削除します。

パターン 'p'は任意に複雑にすることができ、特に に複数のコンバージョンキーワードを含めることができます。例えば、 "%replace(%logger %msg){'。'、 '/'}"はロガー内のすべてのドットまたはイベントのメッセージ をスラッシュで置き換えます。

%replace([CORR=%X{CORR}]){'\[CORR=\]', ''}[MSG=]%n 

CORRが空で、[CORR=]試合r正規表現ので、空の文字列に置き換えられて次のよう

私のパターンは今見えます。

関連する問題