如何使用 log4j2 向自定义附加程序发送一些额外信息(对象)?

Hai*_* Li 1 java logging log4j2

我在我的项目中使用 log4j2,比如控制塔。并使用一些自定义日志附加程序来发送 websocket 事件、snmp 陷阱事件、插入到数据库。

我想向自定义日志附加程序发送更多信息,例如错误代码、源节点、snmp Oid、作业 ID 等...

使用 log4j2,有没有办法向日志附加程序发送更多信息?

像这样:

记录部分:logger.info(customObject);

snmp追加器:从customObject获取oid,从customObject获取消息

websocketappender:从customObject获取jobid,从customObject获取消息

数据库appender:从customObject获取错误代码,从customObject获取消息

抱歉我的英语不好。任何帮助将不胜感激。

Hai*_* Li 5

我找到了解决方案。log4j2有消息接口。我可以实现这个接口来发送自定义信息。就像

public class CustomLogMessage implements Message {
  private String oid;
  private long errorCode;
  private String msg;
....
}
Run Code Online (Sandbox Code Playgroud)

在自定义日志附加程序中,我可以将消息投射到 CustomLogMessage 并获取信息。就像

@Override
public void append(LogEvent event) {
    Message message = event.getMessage();
    if(message instanceof CustomLogMessage) {
        CustomLogMessage customLogMessage = (CustomLogMessage) message;
        System.out.println(customLogMessage.getOid());
        System.out.println(customLogMessage.getErrorCode());
        System.out.println(customLogMessage.getFormattedMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)