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

时间:2016-03-23 08:43:48

标签: java logback

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

[CORR=%X{CORR}] [MSG=%msg]%n

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

[CORR=12342314] [MSG=Some message]

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

[CORR=] [MSG=Some message]

但应该是:

[MSG=Some message]

如果[CORR=]中没有相应的值而没有创建自定义MDC实现,是否有任何方法可以完全摆脱这个LayoutBase模式的部分? 我试图配置评估者:

<evaluator name="DISPLAY_CORR_EVAL">
    <expression>((String) mdc.get("CORR")) != null</expression>
</evaluator>

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

1 个答案:

答案 0 :(得分:4)

问题是在Logback replace(p){r, t}转化词的帮助下解决的:

  

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

     

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

我的模式现在看起来如下:

%replace([CORR=%X{CORR}]){'\[CORR=\]', ''}[MSG=]%n

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