如何在LOG4J模式上有条件地从MDC添加文本?

Mat*_*208 11 log4j

如果在MDC上设置了值,如何在log4j条目上打印键/值对?

例如,我目前有以下模式:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - client=%X{client} %m%n
Run Code Online (Sandbox Code Playgroud)

我想打印"client ="部分只有在MDC上有这个键的值时才会打印.

例如,在启动我的程序时,将没有客户端登录,因此将使用此模式记录日志:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)

但是,在客户端登录后(以及在我使用"客户端"密钥设置MDC之后),我需要使用以下内容进行打印:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - client=%X{client} %m%n
Run Code Online (Sandbox Code Playgroud)

log4j上有这样的"条件模式"吗?

谢谢

bno*_*orm 10

%notEmptyLog4j2中有一个模式可以使您准确地实现这一目标。

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %notEmpty{client=%X{client} }%m%n
Run Code Online (Sandbox Code Playgroud)


Mat*_*208 5

我最终使用了xav的建议。

我从log4j模式中删除了“ client =”字符串,并在每次向MDC添加条目时都附加了它。这不是最漂亮的解决方案,但效果很好!

例如,在其他情况下我会使用

MDC.put("client", client.getId());
Run Code Online (Sandbox Code Playgroud)

我现在正在使用:

MDC.put("client", "client="+client.getId().toString());
Run Code Online (Sandbox Code Playgroud)