我定义了一个这样的日志格式字符串:
[%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
而且我不知道最后一美元是从哪里来的。