次のようなログ形式文字列を定義しました。
[%Time%] %Logger%.%Level%: %Message% ${$%Context%$}$ $\n$%Extra%\n
さらに、%-Keys の置き換えに加えて、%Context%-Key の近くのような条件を定義できるようにしたいと考えています。
したがって、%Context% が空の場合は、完全な ${$%Context%$}$ をスキップします。%Context% が空でない場合は、プレフィックス { とサフィックス } も出力します。
私はこれを試しました(ループ内でキーを置き換える予定でした):
$output = '';
$subject = '[%Time%] %Logger%.%Level%: %Message% ${$%Context%$}$ $\n$%Extra%\n';
$output .= preg_replace('/(\$(.*|^\$)\$)?%Context%(\$(.*|^\$)\$)?/', '\2test\4', $subject);
私が期待するもの(コンテキストが空):
[%Time%] %Logger%.%Level%: %Message% $\n$%Extra%\n
私が期待するもの(コンテキストが空ではない):
[%Time%] %Logger%.%Level%: %Message% {test} $\n$%Extra%\n
私が得るもの(コンテキストが空ではない):
[%Time%] %Logger%.%Level%: %Message% {test}$ $\n%Extra%\n
そして、最後の $ がどこから来たのかわかりません。