2014-08-28 93 views
2

我想使用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]+:(|$ 

我的正則表達式有點弱。我似乎無法理解替換模式爲什麼會出現在我的日誌行中。任何幫助是極大的讚賞。

回答