Browse Source

netty logging file separate

shjung 2 weeks ago
parent
commit
71bc1de0fa

+ 4 - 0
evps-comm-server/src/main/java/com/evps/comm/server/config/TraceConfig.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.util.List;
 import java.util.Properties;
 
@@ -34,6 +35,9 @@ public class TraceConfig {
             props.load(in);
             in.close();
         }
+        catch (FileNotFoundException ef) {
+            // no logging
+        }
         catch(Exception e) {
             log.error("{}.getProperties Exception: {}", this.getClass().getSimpleName(), e.toString());
         }

+ 3 - 2
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/EvpsCommServerInitializer.java

@@ -7,6 +7,7 @@ import com.evps.comm.server.process.dbms.DbmsDataProcess;
 import com.evps.comm.server.repository.ApplicationRepository;
 import com.evps.comm.server.xnet.server.codec.EvpsSendByteBufMessageEncoder;
 import com.evps.comm.server.xnet.server.handler.EvpsCommServerInboundMessageHandler;
+import com.evps.comm.server.xnet.server.handler.MdcLoggingHandler;
 import com.evps.common.dto.EvpsCenter;
 import com.evps.common.protocol.EvpsProtocolConst;
 import com.its.common.network.NettyUtils;
@@ -16,7 +17,6 @@ import io.netty.channel.ChannelInitializer;
 import io.netty.channel.ChannelPipeline;
 import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
 import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
 import io.netty.handler.timeout.IdleStateHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
@@ -81,7 +81,8 @@ public class EvpsCommServerInitializer extends ChannelInitializer<Channel> {
         IdleStateHandler idleStateHandler = new IdleStateHandler(this.config.getReaderIdleTimeSeconds(), 0, 0);
         ChannelPipeline pipeline = channel.pipeline();
         if (this.config.isPacketDebug()) {
-            pipeline.addLast(new LoggingHandler(LogLevel.INFO));
+            //pipeline.addLast(new LoggingHandler(LogLevel.INFO));
+            pipeline.addLast(new MdcLoggingHandler(LogLevel.INFO));
         }
         pipeline.addLast("idleStateHandler", idleStateHandler);
         pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(

+ 2 - 64
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/handler/EvpsCommServerInboundMessageHandler.java

@@ -4,13 +4,10 @@ import com.evps.comm.server.entity.TbRegionCenterComm;
 import com.evps.comm.server.process.dbms.DbmsData;
 import com.evps.comm.server.process.dbms.DbmsDataProcess;
 import com.evps.comm.server.repository.ApplicationRepository;
+import com.evps.comm.server.xnet.server.process.ProcessPacket;
 import com.evps.comm.server.xnet.server.process.work.DataPacketProcess;
 import com.evps.common.dto.EvpsCenter;
-import com.evps.common.protocol.EvpsCommPacket;
-import com.evps.common.protocol.eEvpsOpCode;
-import com.evps.common.protocol.response.RecvPacketDto;
 import com.its.common.network.NettyUtils;
-import com.its.common.utils.ByteUtils;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
@@ -33,68 +30,9 @@ public class EvpsCommServerInboundMessageHandler extends SimpleChannelInboundHan
 
     @Override
     protected void channelRead0(ChannelHandlerContext ctx, ByteBuf byteBuf) throws Exception {
-        final long recvTime = System.currentTimeMillis();
-        EvpsCenter center = ApplicationRepository.getCenterObject(ctx.channel());
-        if (center == null) {
-            log.error("[{}]. RECV: Not Found Channel Center Object... Oops Will be closed.", NettyUtils.getAddress(ctx.channel()));
-            ApplicationRepository.closeChannel(null, ctx.channel());
-            return;
-        }
-
-        boolean isError = false;
 
-        try {
-            MDC.put("id", center.getLogKey());
-
-            EvpsCommPacket evpsCommPacket = new EvpsCommPacket(center, byteBuf);
-
-            if (center.isDump()) {
-                log.info("[{}]. RECV: {} Bytes. {}\r\nService Id: {}. Time: {}. Head: {} Bytes. Body: {} Bytes. {}{}",
-                        center.getLogKey(), evpsCommPacket.getFrameLength(), eEvpsOpCode.getValue(evpsCommPacket.getOpCode()),
-                        evpsCommPacket.getServiceId(), evpsCommPacket.getCommDate(),
-                        evpsCommPacket.getHeadBuffer().length, evpsCommPacket.getBuffer().length,
-                        ByteUtils.byteArrayToHex(evpsCommPacket.getHeadBuffer()),
-                        ByteUtils.byteArrayToHex(evpsCommPacket.getBuffer()));
-            }
-            else {
-                log.info("[{}]. RECV: {} Bytes. {}", center.getLogKey(), evpsCommPacket.getFrameLength(), eEvpsOpCode.getValue(evpsCommPacket.getOpCode()));
-            }
+        ProcessPacket.processPacket(ctx, byteBuf, this.dataPacketProcess, this.dbmsDataProcess);
 
-            if (!evpsCommPacket.isValid()) {
-                log.error("[{}]. RECV: {} Bytes. Packet Validation Error: will be closed.", center.getIpAddress(), evpsCommPacket.getFrameLength());
-                isError = true;
-            }
-            else {
-                RecvPacketDto packet = RecvPacketDto.builder()
-                        .recvTime(recvTime)
-                        .center(center)
-                        .packet(evpsCommPacket)
-                        .build();
-
-                center.getNetState().setLastRecvTime();
-                this.dataPacketProcess.add(packet);
-
-                TbRegionCenterComm stts = TbRegionCenterComm.builder()
-                        .centerId(center.getCenterId())
-                        .commState(TbRegionCenterComm.CENTER_COMM_LAST)
-                        .opCode(evpsCommPacket.getOpCode())
-                        .opCodeDesc(evpsCommPacket.getOpCodeDesc())
-                        .build();
-                this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_CENTER_STTS, center, stts));
-            }
-        }
-        catch (Exception e) {
-            log.error("[{}]. RECV: Exception Error: will be closed: {}.", center.getLogKey(), e.getMessage());
-            isError = true;
-        }
-        finally {
-            if (isError) {
-                ApplicationRepository.closeChannel(center, ctx.channel());
-            }
-
-            MDC.remove(center.getLogKey());
-            MDC.clear();
-        }
     }
 
     @Override

+ 199 - 0
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/handler/MdcLoggingHandler.java

@@ -0,0 +1,199 @@
+package com.evps.comm.server.xnet.server.handler;
+
+import com.evps.comm.server.repository.ApplicationRepository;
+import com.evps.common.dto.EvpsCenter;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelPromise;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import org.slf4j.MDC;
+
+import java.net.SocketAddress;
+
+public class MdcLoggingHandler extends LoggingHandler {
+
+    public MdcLoggingHandler(LogLevel level) {
+        super(level);
+    }
+
+    private void setMdc(ChannelHandlerContext ctx) {
+        EvpsCenter center = ctx.channel().attr(ApplicationRepository.SIG_REGION_ATTRIBUTE_KEY).get();
+        if (center != null && center.getLogKey() != null) {
+            MDC.put("id", center.getLogKey());
+        }
+    }
+
+    private void clearMdc() {
+        MDC.remove("id");
+    }
+
+    @Override
+    public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.channelRegistered(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.channelUnregistered(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.channelActive(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.channelInactive(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+        setMdc(ctx);
+        try {
+            super.channelRead(ctx, msg);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.channelReadComplete(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
+        setMdc(ctx);
+        try {
+            super.userEventTriggered(ctx, evt);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.channelWritabilityChanged(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+        setMdc(ctx);
+        try {
+            super.exceptionCaught(ctx, cause);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) throws Exception {
+        setMdc(ctx);
+        try {
+            super.bind(ctx, localAddress, promise);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception {
+        setMdc(ctx);
+        try {
+            super.connect(ctx, remoteAddress, localAddress, promise);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
+        setMdc(ctx);
+        try {
+            super.disconnect(ctx, promise);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void close(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
+        setMdc(ctx);
+        try {
+            super.close(ctx, promise);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void deregister(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
+        setMdc(ctx);
+        try {
+            super.deregister(ctx, promise);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void read(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.read(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
+        setMdc(ctx);
+        try {
+            super.write(ctx, msg, promise);
+        } finally {
+            clearMdc();
+        }
+    }
+
+    @Override
+    public void flush(ChannelHandlerContext ctx) throws Exception {
+        setMdc(ctx);
+        try {
+            super.flush(ctx);
+        } finally {
+            clearMdc();
+        }
+    }
+}

+ 90 - 0
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/ProcessPacket.java

@@ -0,0 +1,90 @@
+package com.evps.comm.server.xnet.server.process;
+
+import com.evps.comm.server.entity.TbRegionCenterComm;
+import com.evps.comm.server.process.dbms.DbmsData;
+import com.evps.comm.server.process.dbms.DbmsDataProcess;
+import com.evps.comm.server.repository.ApplicationRepository;
+import com.evps.comm.server.xnet.server.process.work.DataPacketProcess;
+import com.evps.common.dto.EvpsCenter;
+import com.evps.common.protocol.EvpsCommPacket;
+import com.evps.common.protocol.eEvpsOpCode;
+import com.evps.common.protocol.response.RecvPacketDto;
+import com.its.common.network.NettyUtils;
+import com.its.common.utils.ByteUtils;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.MDC;
+
+@Slf4j
+public class ProcessPacket {
+
+    private ProcessPacket() {
+
+    }
+
+    public static void processPacket(ChannelHandlerContext ctx, ByteBuf byteBuf, DataPacketProcess dataPacketProcess, DbmsDataProcess dbmsDataProcess) {
+        final long recvTime = System.currentTimeMillis();
+        EvpsCenter center = ApplicationRepository.getCenterObject(ctx.channel());
+        if (center == null) {
+            log.error("[{}]. RECV: Not Found Channel Center Object... Oops Will be closed.", NettyUtils.getAddress(ctx.channel()));
+            ApplicationRepository.closeChannel(null, ctx.channel());
+            return;
+        }
+
+        boolean isError = false;
+
+        try {
+            MDC.put("id", center.getLogKey());
+
+            EvpsCommPacket evpsCommPacket = new EvpsCommPacket(center, byteBuf);
+
+            if (center.isDump()) {
+                log.info("[{}]. RECV: {} Bytes. {}\r\nService Id: {}. Time: {}. Head: {} Bytes. Body: {} Bytes. {}{}",
+                        center.getLogKey(), evpsCommPacket.getFrameLength(), eEvpsOpCode.getValue(evpsCommPacket.getOpCode()),
+                        evpsCommPacket.getServiceId(), evpsCommPacket.getCommDate(),
+                        evpsCommPacket.getHeadBuffer().length, evpsCommPacket.getBuffer().length,
+                        ByteUtils.byteArrayToHex(evpsCommPacket.getHeadBuffer()),
+                        ByteUtils.byteArrayToHex(evpsCommPacket.getBuffer()));
+            }
+            else {
+                log.info("[{}]. RECV: {} Bytes. {}", center.getLogKey(), evpsCommPacket.getFrameLength(), eEvpsOpCode.getValue(evpsCommPacket.getOpCode()));
+            }
+
+            if (!evpsCommPacket.isValid()) {
+                log.error("[{}]. RECV: {} Bytes. Packet Validation Error: will be closed.", center.getIpAddress(), evpsCommPacket.getFrameLength());
+                isError = true;
+            }
+            else {
+                RecvPacketDto packet = RecvPacketDto.builder()
+                        .recvTime(recvTime)
+                        .center(center)
+                        .packet(evpsCommPacket)
+                        .build();
+
+                center.getNetState().setLastRecvTime();
+                dataPacketProcess.add(packet);
+
+                TbRegionCenterComm stts = TbRegionCenterComm.builder()
+                        .centerId(center.getCenterId())
+                        .commState(TbRegionCenterComm.CENTER_COMM_LAST)
+                        .opCode(evpsCommPacket.getOpCode())
+                        .opCodeDesc(evpsCommPacket.getOpCodeDesc())
+                        .build();
+                dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_CENTER_STTS, center, stts));
+            }
+        }
+        catch (Exception e) {
+            log.error("[{}]. RECV: Exception Error: will be closed: {}.", center.getLogKey(), e.getMessage());
+            isError = true;
+        }
+        finally {
+            if (isError) {
+                ApplicationRepository.closeChannel(center, ctx.channel());
+            }
+
+            MDC.remove(center.getLogKey());
+            MDC.clear();
+        }
+    }
+}

+ 22 - 0
evps-comm-server/src/main/resources/logback-spring-appender.xml

@@ -44,6 +44,28 @@
         </sift>
     </appender>
 
+    <appender name="NETTY_PACKET" class="ch.qos.logback.classic.sift.SiftingAppender">
+        <discriminator>
+            <key>id</key>
+            <defaultValue>${LOG_FILE_NAME_PACKET}</defaultValue>
+        </discriminator>
+        <sift>
+            <appender name="FILE-tcp-${id}" class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <file>${LOG_PATH}packet/tcp-${id}.log</file>
+                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+                    <charset>${FILE_LOG_CHARSET}</charset>
+                    <Pattern>${LOG_PATTERN_PACKET}</Pattern>
+                </encoder>
+
+                <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+                    <FileNamePattern>${LOG_BACKUP_PATH}packet/tcp-${id}.${LOG_FILE_NAME_BACKUP}</FileNamePattern>
+                    <maxFileSize>${MAX_FILESIZE}</maxFileSize>
+                    <maxHistory>${MAX_HISTORY}</maxHistory>
+                </rollingPolicy>
+            </appender>
+        </sift>
+    </appender>
+
     <appender name="FILE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${LOG_PATH}${LOG_FILE_NAME}</file>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

+ 15 - 12
evps-comm-server/src/main/resources/logback-spring.xml

@@ -33,9 +33,7 @@
     <property name="LOG_PATTERN_HEALTH"      value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
     <property name="LOG_PATTERN_CONSOLE"     value="[%d{HH:mm:ss.SSS}] %highlight([%5level]): %cyan(%msg) %n"/>
 
-    <springProfile name="!xxx">
-        <include resource="logback-spring-appender.xml"/>
-    </springProfile>
+    <include resource="logback-spring-appender.xml"/>
 
     <logger name="${APP_CLASS_PATH}.EvpsCommServerApplication" level="INFO" additivity="false">
         <appender-ref ref="CONSOLE"/>
@@ -50,30 +48,30 @@
             <appender-ref ref="FILE_ERROR"/>
         </root>
 
+        <logger name="${APP_CLASS_PATH}.xnet.server.handler.MdcLoggingHandler" level="INFO" additivity="false">
+            <appender-ref ref="NETTY_PACKET"/>
+            <appender-ref ref="FILE_ERROR"/>
+        </logger>
+
         <logger name="${APP_CLASS_PATH}.health" level="INFO" additivity="false">
-            <appender-ref ref="CONSOLE"/>
             <appender-ref ref="FILE_HEALTH"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>
 
         <logger name="${APP_CLASS_PATH}.kafka" level="INFO" additivity="false">
-            <appender-ref ref="CONSOLE"/>
             <appender-ref ref="FILE_KAFKA"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>
 
-        <logger name="${APP_CLASS_PATH}.xnet" level="INFO" additivity="false">
-            <appender-ref ref="CONSOLE"/>
+        <logger name="${APP_CLASS_PATH}.xnet.server.process" level="INFO" additivity="false">
             <appender-ref ref="FILE_PACKET"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>
         <logger name="${APP_CLASS_PATH}.xnet.server.EvpsCommServerInitializer" level="INFO" additivity="false">
-            <appender-ref ref="CONSOLE"/>
             <appender-ref ref="FILE_SESSION"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>
-        <logger name="${APP_CLASS_PATH}.xnet.server.handler" level="INFO" additivity="false">
-            <appender-ref ref="CONSOLE"/>
+        <logger name="${APP_CLASS_PATH}.xnet.server.handler.EvpsCommServerInboundMessageHandler" level="INFO" additivity="false">
             <appender-ref ref="FILE_SESSION"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>
@@ -85,6 +83,11 @@
             <appender-ref ref="FILE_ERROR"/>
         </root>
 
+        <logger name="${APP_CLASS_PATH}.xnet.server.handler.MdcLoggingHandler" level="INFO" additivity="false">
+            <appender-ref ref="NETTY_PACKET"/>
+            <appender-ref ref="FILE_ERROR"/>
+        </logger>
+
         <logger name="${APP_CLASS_PATH}.health" level="INFO" additivity="false">
             <appender-ref ref="FILE_HEALTH"/>
             <appender-ref ref="FILE_ERROR"/>
@@ -95,7 +98,7 @@
             <appender-ref ref="FILE_ERROR"/>
         </logger>
 
-        <logger name="${APP_CLASS_PATH}.xnet" level="INFO" additivity="false">
+        <logger name="${APP_CLASS_PATH}.xnet.server.process" level="INFO" additivity="false">
             <appender-ref ref="FILE_PACKET"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>
@@ -103,7 +106,7 @@
             <appender-ref ref="FILE_SESSION"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>
-        <logger name="${APP_CLASS_PATH}.xnet.server.handler" level="INFO" additivity="false">
+        <logger name="${APP_CLASS_PATH}.xnet.server.handler.EvpsCommServerInboundMessageHandler" level="INFO" additivity="false">
             <appender-ref ref="FILE_SESSION"/>
             <appender-ref ref="FILE_ERROR"/>
         </logger>