ローリングファイルアペンダのデフォルトロールオーバー戦略をプログラム的に変更しようとしているプログラムがあり、IfFilNameパス条件をそのままにしておくと、 IfLastModifiedのパス条件のみを使用するので、すべてが完全に動作しているように見えますが、IfFileName条件を追加するとファイルの削除が中止されます...Log4j2ローリングファイルアペンダIfFileName条件でファイルが見つからない/削除されない
この条件を作成する方法に問題があります。あなたが見ることができるように
<RollingFile name="RollingFile" fileName="cc" filePattern="logs/${baseFileName}-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-40t] %-5level %-80.80l - %msg%n"/>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<DefaultRolloverStrategy>
<Delete basePath="logs/">
<IfFileName glob="${baseFileName}-*.log.gz" />
<IfLastModified age="2d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
ので、各ログファイルをベースディレクトリにログフォルダに保存されている、このちなんで命名され -
私のxmlファイルには、これはアペンダとして設定していますプロパティ先頭に設定 -
<Properties>
<Property name="baseFileName" value="VrsEditor"/>
</Properties>
baseFileNameは、設定ファイル/クラスは、ロギングを行っているかに基づいているので、プログラムの異なるサービスは異なる名前を持っているので、それが
...このように設定されていますこの設定ファイルは、素晴らしい作品と仕事をしていませんが、私は戦略上のデフォルトのロールを変更するには、私の方法を適用すると、私はここにIfFileName条件
を含む場合、それは動作を停止し、私はその条件を設定しています方法です -
をIfFileName fileName = IfFileName.createNameCondition("${baseFileName}-*.log.gz", "${baseFileName}-*.log.gz");
createNameCondition方法は、私は文字列のグロブ値と文字列の正規表現の値を渡す必要があり、この方法については、これthis--
createNameCondition( @PluginAttribute(value="glob")
String glob,
@PluginAttribute(value="regex")
String regex)
のようなものです....そしてあなたが私の上に見ることができるようにちょうどまったく同じStringを使用このメソッドを変更するには、ファイルが保存されている日数のIfLastModified条件が必要なため、元の設定ファイルにあります。
誰でも、なぜこのIfFileName条件が機能していないのか分かりますが、元の設定ファイルと同じ値を渡しても動作しますか?
私は弦の部分としての正規表現の部分がまったく同じものでなければならないと思っていますか?
"$ {baseFileName} - *。log.gz"をregexに変換するためにどのような正規表現変換を使用する必要がありますか?このIfFileName条件がプログラムでは動作しないが、構成ファイル自体から動作する理由は他にもあるでしょうか?