设置本地和远程队列之间的相关性ID,使用相同的ID获取splunk中的日志

时间:2019-07-17 13:50:37

标签: jms mq

我有两个队列。其中一个是本地的,另一个是远程的。

通常,我使用rfhutil工具提供所有详细信息。

通过设置correlationid,我确实使用相同的日志来获取日志。

什么是合适的代码。

1 个答案:

答案 0 :(得分:0)

发送消息时:

Session session = ...
String  correlationId = ...

TextMessage msg = session.createTextMessage(payload);
msg.setJMSCorrelationID(correlationID);
log.info("Message sent with correlationID: '{}'", correlationId);

接收消息时:

MessageConsumer consumer = ...
Message msg = consumer.receiveNoWait();
String correlationId = msg.getJMSCorrelationID();
log.info("Received message with correlationID: '{}'", correlationId);

通过使用SLF4J的映射诊断上下文(也称为MDC)功能,您可以在同一线程的以下每个日志行上添加相关ID:

// assume folllowing logback pattern or equivalent for other loggers:
// <pattern>cid: %X{cid} %msg %n</pattern>

String correlationId = "AssumeProperCorrelationIdHere"
org.slf4j.MDC.put("cid", correlationId);
log.info("MDC is a mighty feature");

// expected log output:
// cid: AssumeProperCorrelationIdHere MDC is a mighty feature

现在,当在Splunk中搜索“ AssumeProperCorrelationIdHere”时,您将获取所有包含此值的日志事件。另外,通过在日志中使用键值格式,可以很容易地使用正则表达式(如“ cid:\ w +”)来构造splunk字段。这将使您可以在关联ID上具有聚合功能。因此,您可以进行唯一查询,计数查询或其他查询。