如何使用log4j2向自定义appender发送一些额外的信息(对象)?

时间:2016-06-01 08:00:22

标签: java logging log4j2

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

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

使用log4j2,有没有办法向log appender发送更多信息?

就像这样:

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

snmp appender :从customObject获取oid,从customObject获取消息

websocket appender :从customObject获取jobid,从customObject获取消息

数据库附加程序:从customObject获取错误代码,从customObject获取消息

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

2 个答案:

答案 0 :(得分:2)

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

public class CustomLogMessage implements Message {
  private String oid;
  private long errorCode;
  private String msg;
....
}

在自定义日志追加器中,我可以将消息转发给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());
    }
}

答案 1 :(得分:-3)

Log4j将始终发送字符串,并且不提供序列化功能。

我建议你在调用log4j之前序列化你的对象。您可以使用与这些技术兼容的血清化格式。

也许您可以使用jackson库将对象序列化到JSOJN。