我正在尝试使用 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
在 5% 的时间内打印
2014-08-28 11:30:27,014 emp: org: Cleanup jobs.
这是因为在后一种情况下不需要在 MDC 上提供 emp 和 org。对于这些情况,我希望 emp: 和 org: 根本不存在于日志行中。
期望的
2014-08-28 11:30:27,014 Cleanup jobs.
替换的可能解决方案
这是我的变量和我正在使用的附加程序。这个想法是 mdcPattern 将解析为没有 emp 和 org 值的空字符串。
<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>
但是替换正则表达式不起作用。我将日志行视为:
2014-08-28 11:30:27,014 emp: org: {'[a-z]+:( |$
我的正则表达式有点弱。我似乎无法理解为什么替换模式会出现在我的日志行中。任何帮助是极大的赞赏。