2017-12-13 25 views
0

私はLog4j 1.2.15を使用しなければならないと言ってこれを前に説明します。残念ながら、私はアップグレードを提案しないでください。私はExtras companion version 1.1にアクセスしています。Log4j 1.2.15 ExpressionFilter regex

ExpressionFilterを使用して、少なくとも1つの ' - '記号の後に任意の数字の0-9を含むメッセージを一致させようとしています。たとえば :-03928474または--27646など

EDIT:完全な文字列の 例: 私はこれの一部を一致させたい<ClassName---0182364759> xxx this is a debug message

私は、次の式を使用しています:MSG LIKE [-]{1,}[0-9]{1,}

これは私が試したすべての正規表現建設現場に基づいて、私のニーズに対応すべきです。私は[0-9]{1,}の代わりに\d{1,}を試しましたが、Log4jは式から\ dを削除することに注意してください(私はデバッグを有効にしています)。

Appenderの他のExpressionFilterが期待通りに機能するので、これはAppenderの構造では問題ではないと思います。

これは動作しないものである:次の行に同じアペンダで

<filter class="org.apache.log4j.filter.ExpressionFilter"> 
    <param name="Expression" value="(MSG LIKE [-]{1,}[0-9]{1,})" /> 
    <param name="AcceptOnMatch" value="true" /> 
</filter> 

は、作業を行います。

<filter class="org.apache.log4j.filter.ExpressionFilter"> 
    <param name="Expression" value="(LEVEL >= WARN)" /> 
    <param name="AcceptOnMatch" value="true" /> 
</filter> 

これはXMLで指定する必要があります。

Log4j 1.2が正規表現を処理する方法の特質に精通している人、または私が間違っている箇所を指摘できる人は誰ですか?

+0

'\ d'の代わりに' [0-9] 'を使うのは分かりますが、' + 'の代わりに' {1、} 'を使うのはちょっとばかげています。また、大括弧の中に '-'を入れている理由は分かりません。とにかく、入力文字列の一部を回答に含めることはできますか?あなたがマッチしているものがわからないときは、問題をデバッグするのは難しいです。 – CAustin

+0

私はすでにいくつかの例を挙げています: "例えば:' -03928474'や '--27646'など。 –

+0

それは全体の行ですか?あなたのパターンには 'MSG LIKE ... 'が含まれています – CAustin

答えて

0

いいえ、Log4j 1.2のLIKEルールは文字列全体と一致するmatcher.matches()を使用していますが、文字列の一部のみを一致させたいと考えていました。次のように

解決策だった:

.*-+[0-9]+.*

これは私がしたい部分一致の前後に非改行任意の数の文字に一致します。