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

时间:2014-08-28 19:41:34

标签: 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

有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]+:( |$

我的正则表达式有点弱。我似乎无法理解为什么替换模式出现在我的日志行中。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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