Logback 替换正则表达式来检测空值

Pra*_*kor 4 regex logback mdc

我正在尝试使用 logback 的替换功能,以免在我的 MDC 日志模式中打印空值。 http://logback.qos.ch/manual/layouts.html#replace

我试图遵循这里的示例 http://logogin.blogspot.com/2013/04/logback-mdc-and-empty-values.html

一些背景

90% 的时间我的日志模式都会打印

2014-08-28 11:30:27,014  emp:Peter org:IT Expense submitted
Run Code Online (Sandbox Code Playgroud)

打印时间的 5%

2014-08-28 11:30:27,014  emp: org: Cleanup jobs.
Run Code Online (Sandbox Code Playgroud)

这是因为在后一种情况下,不需要在 MDC 上提供 emp 和 org。对于这些情况,我希望 emp: 和 org: 根本不出现在日志行中。

期望的

2014-08-28 11:30:27,014  Cleanup jobs.
Run Code Online (Sandbox Code Playgroud)

可能的解决方案是更换

这是我的变量和我正在使用的附加器。这个想法是,对于没有 emp 和 org 值的情况, mdcPattern 将解析为空字符串。

<variable scope="context" name="mdcPattern" value="%replace( emp:%X{empName} org:%X{orgName} ) {'[a-z]+:( |$)', ''}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d ${mdcPattern} %thread %-5level %logger{25} - %msg%n</pattern>
    </encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)

但是替换正则表达式不起作用。我看到日志行为:

2014-08-28 11:30:27,014  emp: org: {'[a-z]+:( |$
Run Code Online (Sandbox Code Playgroud)

我的正则表达式有点弱。我似乎无法理解为什么替换模式会按原样出现在我的日志行中。任何帮助是极大的赞赏。

Pra*_*kor 5

在原始博客文章作者的帮助下,我成功地实现了这一点。他在 GitHub 上提供了另一个示例。 http://logogin.blogspot.com/2013/04/logback-mdc-and-empty-values.html

https://gist.github.com/logogin/ff44c254f655340b653c

我在替换模式中有多余的空格,已将其删除。

例如:{orgName} ) {'[a-z]+ 至:{orgName}){'[a-z]+