在某些条件下动态更改日志条目模式

Ali*_*der 0 java logback

在我的 Java 应用程序中,Logback 用作日志记录框架。使用以下模式配置的附加程序(简化):

[CORR=%X{CORR}] [MSG=%msg]%n
Run Code Online (Sandbox Code Playgroud)

正如人们所见,CORR值取自MDC。日志条目示例:

[CORR=12342314] [MSG=Some message]
Run Code Online (Sandbox Code Playgroud)

在某些情况下,属性未存储在 中MDC,因此日志条目如下所示:

[CORR=] [MSG=Some message]
Run Code Online (Sandbox Code Playgroud)

但应该是:

[MSG=Some message]
Run Code Online (Sandbox Code Playgroud)

[CORR=]如果在MDC不创建自定义LayoutBase实现的情况下不存在相应的值,有没有办法完全摆脱模式的这一部分?我正在尝试配置评估器:

<evaluator name="DISPLAY_CORR_EVAL">
    <expression>((String) mdc.get("CORR")) != null</expression>
</evaluator>
Run Code Online (Sandbox Code Playgroud)

但不知道如何在我的情况下使用它。

Ali*_*der 5

问题在 Logbackreplace(p){r, t}转换词的帮助下解决了:

在由子模式 'p' 生成的字符串中,将出现的 'r'(一个正则表达式)替换为它的替换 't'。例如,“%replace(%msg){'\s', ''}”将删除事件消息中包含的所有空格。

模式“p”可以是任意复杂的,特别是可以包含多个转换关键字。例如,"%replace(%logger %msg){'.', '/'}" 将用正斜杠替换记录器中的所有点或事件消息。

我的模式现在如下所示:

%replace([CORR=%X{CORR}]){'\[CORR=\]', ''}[MSG=]%n
Run Code Online (Sandbox Code Playgroud)

whenCORR为空,[CORR=]匹配r正则表达式,因此被空字符串替换。