嗨,我正在通过一个 xml 文件配置 log4j2。我已经设置了一个追加器,它正在正确记录。我在配置两个正则表达式以替换日志的 %message 变量中的文本时遇到问题。
我在我的 java 代码中记录消息,如下所示:
logger.info("{ 'name':'person', age:'42' }");
我正在将这些日志发送到 Kafka,并希望将所有 { 或 } 替换为 ",将所有 ' 替换为 "。
我正在使用的当前模式如下所示:
<pattern>{ "logTimestamp":"%date{ISO8601}", %replace{%replace{%message{nolookups}}{\"|\'|"}{'}}{{|}}{},"host":"${hostname}" }</pattern>
但是这不起作用,由于替换,我收到以下解析的消息:
{ "logTimestamp":"2017-03-27T11:11:17,247", %replace}{"}{'},"host":"hostname" }
用 log4j2 %replace 匹配和替换两种模式的正确方法是什么?
您需要将一个语句嵌套在另一个语句中%replace
语句中。
试试这个:
%replace{ %replace{%msg}{'}{"} }{{|}}{""}
结果是:
"" "name":"person", age:"42" ""
我希望它有所帮助。