Log4j 2自动标记选择

时间:2017-09-26 10:26:14

标签: java log4j log4j2

我需要根据我登录的信息记录带有两个不同标记的消息。 例如,我有这种模式:

ts: %d{yyyy-MM-dd HH:mm:ss,SSS} | logLevel: %-5level | appId: example-app-id | thread: (%t) | SID: %X{SID} | TN: %X{TN} | clientIp: %X{clientIp} | username: %X{user} | apiType: B2B | api: %X{api} | platform: %X{platform} | %m%n

但我想只有当用户名和api不为空或空时才会记录此模式。 否则,我想用这种模式登录:

ts: %d{yyyy-MM-dd HH:mm:ss,SSS} | logLevel: %-5level | appId: example-app-id | thread: (%t) | SID: %X{SID} | TN: %X{TN} | %m%n

如何通过每次检查这些信息来影响代码而不影响代码? 感谢

1 个答案:

答案 0 :(得分:0)

您可以使用%equals模式,实际上log4j2 manual Pattern page有一个示例,告诉您如何完全按照您的需要进行操作。

在您的具体情况下,您将替换:

| username: %X{user} | apiType: B2B | api: %X{api}

有了这个:

%equals{| username: %X{user}}{| username: }{} | apiType: B2B %equals{| api: %X{api}}{| api: }{}