You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看org.apache.activemq.command.ActiveMQTextMessage的完整消息文本

如何查看ActiveMQ截断的完整消息文本?

2022-12-14 14:04:56,317 DEBUG
[org.apa.cam.com.jms.EndpointMessageListener] (Camel (camel-1) thread
#8 - JmsConsumer[my.queue]) activemq://queue:my.queue consumer received JMS message: ActiveMQTextMessage {commandId = 13,
responseRequired = true, messageId = ID:xxxx, originalDestination =
null,..., content = org.apache.activemq.util.ByteSequence@11ba49fe,
..., text = { "foo": "bar", "x...y": false}}

注意日志中的text字段已被截断,如何查看完整的消息文本?

当前日志输出逻辑

EndpointMessageListener中的日志语句如下:

LOG.debug("{} consumer received JMS message: {}", this.endpoint, message);

截断原因分析

传入日志的message为javax.jms.Message类型,当它是org.apache.activemq.command.ActiveMQTextMessage实例时,其toString()方法会主动截断文本内容:

public String toString() {
    try {
        String text = this.text;
        if (text == null) {
            text = this.decodeContent(this.getContent());
        }

        if (text != null) {
            text = MarshallingSupport.truncate64(text);
            HashMap<String, Object> overrideFields = new HashMap();
            overrideFields.put("text", text);
            return super.toString(overrideFields);
        }
    } catch (JMSException var3) {
    }

    return super.toString();
}

该方法调用的truncate64方法会将超过63字符的文本截断为「前45位+...+后12位」的格式:

public static String truncate64(String text) {
    if (text.length() > 63) {
        String var10000 = text.substring(0, 45);
        text = var10000 + "..." + text.substring(text.length() - 12);
    }

    return text;
}

获取完整消息内容的方法

1. 修改日志输出代码

直接调用ActiveMQTextMessage的getText()方法获取完整文本,避免依赖toString()的截断逻辑:

if (message instanceof ActiveMQTextMessage) {
    ActiveMQTextMessage textMessage = (ActiveMQTextMessage) message;
    try {
        LOG.debug("{} consumer received JMS message: {}, full text: {}", 
                  this.endpoint, message, textMessage.getText());
    } catch (JMSException e) {
        LOG.error("Failed to get full message text", e);
    }
} else {
    LOG.debug("{} consumer received JMS message: {}", this.endpoint, message);
}

2. 通过ActiveMQ管理工具查看

如果无法修改代码,可通过以下方式查看:

  • Web控制台:访问ActiveMQ默认Web端口(通常为8161),进入对应队列页面,直接查看消息的完整内容。
  • JMX API:通过JMX连接到ActiveMQ Broker,调用管理API获取队列中消息的详情。

3. 修改源码(不推荐)

若必须全局取消截断,可修改MarshallingSupport.truncate64方法的逻辑(比如移除截断判断),但这需要修改ActiveMQ源码并重新编译,会影响所有依赖该方法的日志输出,风险较高,不建议使用。

内容的提问来源于stack exchange,提问作者WesternGun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:45:31