具体logback键值对格式

问题描述 投票:0回答:1

Logback 允许向事件添加键值对。但我发现使用它们的唯一方法是格式化程序中的 %kvp 选项,它只会转储所有 key="value" 对。

有没有办法插入值(我不关心记录密钥),在格式中的特定位置分隔?

对于 MDC 元素,使用 %X 似乎是可行的,但对于简单的密钥对则不行。

或者,我想我可以使用 MDC 来实现此目的,但随后我基本上会更改每个事件的值。在我看来,它并不适合这种用途。

java logback
1个回答
0
投票

幸运的是我今天也遇到了这个问题!

这不是一个很棒的解决方案,但一种方法是使用像这样的正则表达式,假设您的键值对列表中有一个名为

myProperty
的属性,并假设像大多数人一样,您正在使用模式编码器:

%replace(%kvp){'.*myProperty="([^"]+)".*', '$1'}

分解正则表达式:

  • .*
    - 匹配任何字符0次或多次
  • myProperty=
    - 精确的字符串匹配
  • "([^"])"
    - 接下来两个双引号之间的一个或多个非双引号字符,放入捕获组 1
  • .*
    - 任意字符 0 次或多次

然后第二个参数中的 $1 将整个键值字符串替换为捕获组 1 的内容

现在,我们只需从我们放入日志消息中的

%kvp
输出中删除这个键值,它是类似的。假设您的日志消息中有一些
additionalData
字段:

additionalData={%replace(%kvp{DOUBLE}){'[\s]{0,1}myProperty="[^"]"', ''}}

请注意,如果该正则表达式是第一个元素,则它可能会在结果字符串中留下额外的空格。为了解决这个问题,您可以将此正则表达式包装在第二个正则表达式中以删除任何前导空格:

additionalData={%replace(%replace(%kvp{DOUBLE}){'[\s]{0,1}myProperty="[^"]"', ''}}){'^\s+', ''}

它很简洁,但您可以使用 regex101 上的正则表达式或一些类似的交互式工具。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.