diff --git a/external/external-core/src/main/java/com/iohao/game/external/core/config/ExternalGlobalConfig.java b/external/external-core/src/main/java/com/iohao/game/external/core/config/ExternalGlobalConfig.java index 8ec4999a8..1255b8034 100644 --- a/external/external-core/src/main/java/com/iohao/game/external/core/config/ExternalGlobalConfig.java +++ b/external/external-core/src/main/java/com/iohao/game/external/core/config/ExternalGlobalConfig.java @@ -42,7 +42,8 @@ public class ExternalGlobalConfig { public AccessAuthenticationHook accessAuthenticationHook = new DefaultAccessAuthenticationHook(); /** 游戏对外服路由缓存 */ public ExternalCmdCache externalCmdCache; - + /** true 表示开启简单日志打印 netty handler. see SimpleLoggerHandler */ + public boolean enableLoggerHandler = true; /** * 协议开关,用于一些协议级别的开关控制,比如 安全加密校验等。 : 0 不校验 *
diff --git a/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/SimpleLoggerHandler.java b/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/SimpleLoggerHandler.java
new file mode 100644
index 000000000..cfc2ef483
--- /dev/null
+++ b/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/SimpleLoggerHandler.java
@@ -0,0 +1,59 @@
+/*
+ * ioGame
+ * Copyright (C) 2021 - present  渔民小镇 (262610965@qq.com、luoyizhu@gmail.com) . All Rights Reserved.
+ * # iohao.com . 渔民小镇
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see .
+ */
+package com.iohao.game.external.core.netty.handler;
+
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 简单日志打印,通常是不活跃的连接、触发异常的连接
+ *
+ * @author 渔民小镇
+ * @date 2024-05-01
+ */
+@Slf4j
+@ChannelHandler.Sharable
+public final class SimpleLoggerHandler extends ChannelInboundHandlerAdapter {
+
+    @Override
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+        log.info("channelInactive channel.remoteAddress() : {}", ctx.channel().remoteAddress());
+        super.channelInactive(ctx);
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+        log.error(cause.getMessage(), cause);
+        super.exceptionCaught(ctx, cause);
+    }
+
+    private SimpleLoggerHandler() {
+    }
+
+    public static SimpleLoggerHandler me() {
+        return Holder.ME;
+    }
+
+    /** 通过 JVM 的类加载机制, 保证只加载一次 (singleton) */
+    private static class Holder {
+        static final SimpleLoggerHandler ME = new SimpleLoggerHandler();
+    }
+}
diff --git a/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/SocketUserSessionHandler.java b/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/SocketUserSessionHandler.java
index 0b1ea8c81..b6cf0457d 100644
--- a/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/SocketUserSessionHandler.java
+++ b/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/SocketUserSessionHandler.java
@@ -51,7 +51,7 @@ public void setUserSessions(UserSessions userSessions) {
     }
 
     @Override
-    public void channelActive(ChannelHandlerContext ctx) {
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
         BrokerClientModuleMessage moduleMessage = brokerClient.getBrokerClientModuleMessage();
         int idHash = moduleMessage.getIdHash();
 
@@ -59,20 +59,24 @@ public void channelActive(ChannelHandlerContext ctx) {
         SocketUserSession userSession = userSessions.add(ctx);
         userSession.setExternalClientId(idHash);
 
-        ctx.fireChannelActive();
+        super.channelActive(ctx);
     }
 
     @Override
-    public void channelInactive(ChannelHandlerContext ctx) {
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
         // 从 session 管理中移除
         var userSession = this.userSessions.getUserSession(ctx);
         this.userSessions.removeUserSession(userSession);
+
+        super.channelInactive(ctx);
     }
 
     @Override
-    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
         // 从 session 管理中移除
         var userSession = this.userSessions.getUserSession(ctx);
         this.userSessions.removeUserSession(userSession);
+
+        super.exceptionCaught(ctx, cause);
     }
 }
diff --git a/external/external-netty/src/main/java/com/iohao/game/external/core/netty/micro/SocketMicroBootstrapFlow.java b/external/external-netty/src/main/java/com/iohao/game/external/core/netty/micro/SocketMicroBootstrapFlow.java
index 02ddacfdf..bdf9df70e 100644
--- a/external/external-netty/src/main/java/com/iohao/game/external/core/netty/micro/SocketMicroBootstrapFlow.java
+++ b/external/external-netty/src/main/java/com/iohao/game/external/core/netty/micro/SocketMicroBootstrapFlow.java
@@ -79,6 +79,10 @@ public void pipelineIdle(PipelineContext context) {
 
     @Override
     public void pipelineCustom(PipelineContext context) {
+        // 日志打印(异常时)
+        if (ExternalGlobalConfig.enableLoggerHandler) {
+            context.addLast("SimpleLoggerHandler", SimpleLoggerHandler.me());
+        }
 
         // 路由存在检测
         context.addLast("CmdCheckHandler", CmdCheckHandler.me());