我在我的项目中使用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获取消息
抱歉我的英语不好。 任何帮助将不胜感激。答案 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。