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

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

替换的可能解决方案

这是我的变量和我正在使用的 appender。这个想法是 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]+

关于regex - Logback 替换正则表达式以检测空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556766/

相关文章:

spring-boot - Spring Boot 2 和带有反应器的 logback MDC

regex - 与 mod_rewrite 斗争

Java按破折号分割

java - Spring boot-1.5.8 应用程序中的 Logback 从 1.1.11 升级到 1.3.0-alpha4

java - Spring Boot Filter 没有过滤我所有的日志

java - CommonPool 而非自定义池中的 ParallelStream 队列任务

sql - Where 子句中的数字通配符

regex - 使用正则表达式从数字范围中排除某些数字

java - MDC 值未传递给请求

java - 使用 MDC 或 Threadlocal