diff --git a/protocol-gb32960/src/main/java/com/lingniu/ingest/protocol/gb32960/inbound/Gb32960ChannelHandler.java b/protocol-gb32960/src/main/java/com/lingniu/ingest/protocol/gb32960/inbound/Gb32960ChannelHandler.java index 021ba60b..97c07101 100644 --- a/protocol-gb32960/src/main/java/com/lingniu/ingest/protocol/gb32960/inbound/Gb32960ChannelHandler.java +++ b/protocol-gb32960/src/main/java/com/lingniu/ingest/protocol/gb32960/inbound/Gb32960ChannelHandler.java @@ -240,14 +240,30 @@ public class Gb32960ChannelHandler extends SimpleChannelInboundHandler { dispatcher.dispatch(rf); } - /** 统一的 ack 写出 + 日志确认(含完整 hex dump 便于排查对端行为)。 */ + /** + * 统一的 ack 写出 + 日志确认。 + * + *

高频 ack(实时/补发上报 0x02/0x03、心跳 0x07)的成功事件降级为 DEBUG,避免每帧 + * 一条 INFO 淹没日志;稀疏的登入/登出/校时 ack 仍保留 INFO 以便审计。写入失败无论 + * 哪个标签都走 WARN,不会被抑制。 + */ private static void writeAck(ChannelHandlerContext ctx, byte[] ack, String tag) { String hex = hex(ack); + boolean highFrequency = tag.startsWith("report-ack-") || tag.startsWith("heartbeat-ack"); ctx.writeAndFlush(Unpooled.wrappedBuffer(ack)).addListener(f -> { if (f.isSuccess()) { - log.info("[gb32960] {} flushed peer={} len={} hex={}", tag, addr(ctx), ack.length, hex); + if (highFrequency) { + if (log.isDebugEnabled()) { + log.debug("[gb32960] {} flushed peer={} len={} hex={}", + tag, addr(ctx), ack.length, hex); + } + } else { + log.info("[gb32960] {} flushed peer={} len={} hex={}", + tag, addr(ctx), ack.length, hex); + } } else { - log.warn("[gb32960] {} flush FAILED peer={} len={} hex={}", tag, addr(ctx), ack.length, hex, f.cause()); + log.warn("[gb32960] {} flush FAILED peer={} len={} hex={}", + tag, addr(ctx), ack.length, hex, f.cause()); } }); }