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

问题描述:

我想使用logback的替换功能没有在我的MDC日志模式中打印空值。 http://logback.qos.ch/manual/layouts.html#replaceLogback替换正则表达式来检测空值

我试图效仿的榜样从这里 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]+:(|$ 

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

在原始博客文章作者的帮助下,我设法让这个工作。 他在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]+