Переглянути джерело

优化日志打印,去除数据库打印,优化控制台打印效果

648540858 2 роки тому
батько
коміт
d79eec25b0

+ 1 - 1
doc/_content/introduction/deployment.md

@@ -28,7 +28,7 @@ jar包:
 nohup java -jar wvp-pro-*.jar &
 ```
 war包:  
-下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,
+下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,将配置文件中的Server.port配置为与Tomcat端口一致
 然后启动Tomcat。  
 **启动ZLM**
 ```shell

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java

@@ -65,7 +65,7 @@ public class SipLayer implements CommandLineRunner {
 	private void addListeningPoint(String monitorIp, int port){
 		SipStackImpl sipStack;
 		try {
-			sipStack = (SipStackImpl)sipFactory.createSipStack(DefaultProperties.getProperties(monitorIp, false, userSetting.getSipLog()));
+			sipStack = (SipStackImpl)sipFactory.createSipStack(DefaultProperties.getProperties(monitorIp, userSetting.getSipLog()));
 		} catch (PeerUnavailableException e) {
 			logger.error("[Sip Server] SIP服务启动失败, 监听地址{}失败,请检查ip是否正确", monitorIp);
 			return;

+ 5 - 24
src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java

@@ -12,7 +12,7 @@ import java.util.Properties;
  */
 public class DefaultProperties {
 
-    public static Properties getProperties(String ip, boolean isDebug, boolean sipLog) {
+    public static Properties getProperties(String ip, boolean sipLog) {
         Properties properties = new Properties();
         properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP");
         properties.setProperty("javax.sip.IP_ADDRESS", ip);
@@ -25,9 +25,6 @@ public class DefaultProperties {
          */
 
 //		 * gov/nist/javax/sip/SipStackImpl.class
-        if (isDebug) {
-            properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false");
-        }
         // 接收所有notify请求,即使没有订阅
         properties.setProperty("gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY", "true");
         properties.setProperty("gov.nist.javax.sip.AUTOMATIC_DIALOG_ERROR_HANDLING", "false");
@@ -50,29 +47,13 @@ public class DefaultProperties {
          */
         Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class);
         if (sipLog) {
-            if (logger.isDebugEnabled()) {
-                System.out.println("DEBUG");
-                properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "DEBUG");
-            }else if (logger.isInfoEnabled()) {
-                System.out.println("INFO1");
-                properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "INFO");
-            }else if (logger.isWarnEnabled()) {
-                System.out.println("WARNING");
-                properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "WARNING");
-            }else if (logger.isErrorEnabled()) {
-                System.out.println("ERROR");
-                properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "ERROR");
-            }else {
-                System.out.println("INFO2");
-                properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "INFO");
-            }
-            logger.info("[SIP日志]级别为: {}", properties.getProperty("gov.nist.javax.sip.TRACE_LEVEL"));
+            properties.setProperty("gov.nist.javax.sip.STACK_LOGGER", "com.genersoft.iot.vmp.gb28181.conf.StackLoggerImpl");
+            properties.setProperty("gov.nist.javax.sip.SERVER_LOGGER", "com.genersoft.iot.vmp.gb28181.conf.ServerLoggerImpl");
+            properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "true");
+            logger.info("[SIP日志]已开启");
         }else {
             logger.info("[SIP日志]已关闭");
         }
-
-
-
         return properties;
     }
 }

+ 92 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/conf/ServerLoggerImpl.java

@@ -0,0 +1,92 @@
+package com.genersoft.iot.vmp.gb28181.conf;
+
+import gov.nist.core.ServerLogger;
+import gov.nist.core.StackLogger;
+import gov.nist.javax.sip.message.SIPMessage;
+import gov.nist.javax.sip.stack.SIPTransactionStack;
+
+import javax.sip.SipStack;
+import java.util.Properties;
+
+public class ServerLoggerImpl implements ServerLogger {
+
+    private boolean showLog = true;
+
+    private SIPTransactionStack sipStack;
+
+    protected StackLogger stackLogger;
+
+    @Override
+    public void closeLogFile() {
+
+    }
+
+    @Override
+    public void logMessage(SIPMessage message, String from, String to, boolean sender, long time) {
+        if (!showLog) {
+            return;
+        }
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(!sender? "发送:目标--->" + from:"接收:来自--->" + to)
+                .append("\r\n")
+                        .append(message);
+        this.stackLogger.logInfo(stringBuilder.toString());
+
+    }
+
+    @Override
+    public void logMessage(SIPMessage message, String from, String to, String status, boolean sender, long time) {
+        if (!showLog) {
+            return;
+        }
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(!sender? "发送: 目标->" + from :"接收:来自->" + to)
+                .append("\r\n")
+                .append(message);
+        this.stackLogger.logInfo(stringBuilder.toString());
+    }
+
+    @Override
+    public void logMessage(SIPMessage message, String from, String to, String status, boolean sender) {
+        if (!showLog) {
+            return;
+        }
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(!sender? "发送: 目标->" + from :"接收:来自->" + to)
+                .append("\r\n")
+                .append(message);
+        this.stackLogger.logInfo(stringBuilder.toString());
+    }
+
+    @Override
+    public void logException(Exception ex) {
+        if (!showLog) {
+            return;
+        }
+        this.stackLogger.logException(ex);
+    }
+
+    @Override
+    public void setStackProperties(Properties stackProperties) {
+        if (!showLog) {
+            return;
+        }
+        String TRACE_LEVEL = stackProperties.getProperty("gov.nist.javax.sip.TRACE_LEVEL");
+        if (TRACE_LEVEL != null) {
+            showLog = true;
+        }
+    }
+
+    @Override
+    public void setSipStack(SipStack sipStack) {
+        if (!showLog) {
+            return;
+        }
+        if(sipStack instanceof SIPTransactionStack) {
+            this.sipStack = (SIPTransactionStack)sipStack;
+            this.stackLogger = this.sipStack.getStackLogger();
+        }
+    }
+
+
+}

+ 109 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/conf/StackLoggerImpl.java

@@ -0,0 +1,109 @@
+package com.genersoft.iot.vmp.gb28181.conf;
+
+import gov.nist.core.StackLogger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.Properties;
+
+@Component
+public class StackLoggerImpl implements StackLogger {
+
+    private final static Logger logger = LoggerFactory.getLogger(StackLoggerImpl.class);
+
+    @Override
+    public void logStackTrace() {
+
+    }
+
+    @Override
+    public void logStackTrace(int traceLevel) {
+        System.out.println("traceLevel: "  + traceLevel);
+    }
+
+    @Override
+    public int getLineCount() {
+        return 0;
+    }
+
+    @Override
+    public void logException(Throwable ex) {
+
+    }
+
+    @Override
+    public void logDebug(String message) {
+//        logger.debug(message);
+    }
+
+    @Override
+    public void logDebug(String message, Exception ex) {
+//        logger.debug(message);
+    }
+
+    @Override
+    public void logTrace(String message) {
+        logger.trace(message);
+    }
+
+    @Override
+    public void logFatalError(String message) {
+//        logger.error(message);
+    }
+
+    @Override
+    public void logError(String message) {
+//        logger.error(message);
+    }
+
+    @Override
+    public boolean isLoggingEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isLoggingEnabled(int logLevel) {
+        return true;
+    }
+
+    @Override
+    public void logError(String message, Exception ex) {
+//        logger.error(message);
+    }
+
+    @Override
+    public void logWarning(String message) {
+        logger.warn(message);
+    }
+
+    @Override
+    public void logInfo(String message) {
+        logger.info(message);
+    }
+
+    @Override
+    public void disableLogging() {
+
+    }
+
+    @Override
+    public void enableLogging() {
+
+    }
+
+    @Override
+    public void setBuildTimeStamp(String buildTimeStamp) {
+
+    }
+
+    @Override
+    public void setStackProperties(Properties stackProperties) {
+
+    }
+
+    @Override
+    public String getLoggerName() {
+        return null;
+    }
+}

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java

@@ -105,7 +105,7 @@ public class SIPSender {
                 }
             }
         } finally {
-            logger.info("[SEND]:SUCCESS:{}", message);
+//            logger.info("[SEND]:SUCCESS:{}", message);
         }
     }
 

+ 1 - 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java

@@ -67,8 +67,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
     @Override
     public void process(RequestEvent evt) {
         SIPRequest sipRequest = (SIPRequest)evt.getRequest();
-        logger.info("接收到消息:" + evt.getRequest());
-        logger.debug("接收到消息:" + evt.getRequest());
+//        logger.info("接收到消息:" + evt.getRequest());
         String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
         CallIdHeader callIdHeader = sipRequest.getCallIdHeader();
         // 先从会话内查找

+ 17 - 32
src/main/resources/logback-spring-local.xml

@@ -2,16 +2,22 @@
 <configuration debug="false">
 	<!--定义日志文件的存储地址 -->
 	<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
-	<property name="LOG_HOME" value="logs/${spring.application.name}" />
+	<property name="LOG_HOME" value="logs" />
+
+	<substitutionProperty name="log.pattern" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(---){faint} %clr(%-80.80logger{79}){cyan} %clr(:){faint} %m%n%wEx"/>
+
+	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
 
-	<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
 	<!-- 控制台输出 -->
 	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
 			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
+			<pattern>${log.pattern}</pattern>
+			<charset>UTF-8</charset>
 		</encoder>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter" >
 			<!--与ThresholdFilter的区别,允许onmatch-->
 			<!--设置日志级别 接收info级别的日志-->
 			<level>DEBUG</level>
@@ -32,6 +38,7 @@
 		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
 			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
 			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
+			<charset>UTF-8</charset>
 		</encoder>
 		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
 			<!--与ThresholdFilter的区别,允许onmatch-->
@@ -53,32 +60,16 @@
 		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
 			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
 			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
+			<charset>UTF-8</charset>
 		</encoder>
 		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
 			<!--设置日志级别,过滤掉info日志,只输入error日志-->
 			<level>WARN</level>
-			<!--			<onMatch>ACCEPT</onMatch>  &lt;!&ndash; 用过滤器,只接受ERROR级别的日志信息,其余全部过滤掉 &ndash;&gt;-->
-			<!--			<onMismatch>DENY</onMismatch>-->
 		</filter>
 	</appender>
 
-	<!-- 生成 druid日志追加 -->
-	<appender name="druidSqlRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<!--历史日志文件输出的文件名 -->
-			<FileNamePattern>${LOG_HOME}/druid-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
-			<!--日志文件保留天数 -->
-			<MaxHistory>30</MaxHistory>
-			<maxFileSize>50MB</maxFileSize>
-		</rollingPolicy>
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
-		</encoder>
-	</appender>
-
 	<!-- 生成 SIP日志追加 -->
-	<appender name="sipRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	<appender name="SipRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
 			<!--历史日志文件输出的文件名 -->
 			<FileNamePattern>${LOG_HOME}/sip-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
@@ -89,6 +80,7 @@
 		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
 			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
 			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
+			<charset>UTF-8</charset>
 		</encoder>
 	</appender>
 
@@ -98,20 +90,13 @@
 		<appender-ref ref="STDOUT" />
 	</root>
 
-	<logger name="wvp" level="debug" additivity="true">
+	<logger name="com.genersoft.iot.vmp" level="info" additivity="true">
 		<appender-ref ref="RollingFileError"/>
 		<appender-ref ref="RollingFile"/>
 	</logger>
 
-	<logger name="GB28181_SIP" level="debug" additivity="true">
-		<appender-ref ref="RollingFileError"/>
-		<appender-ref ref="sipRollingFile"/>
+	<logger name="com.genersoft.iot.vmp.gb28181.conf.StackLoggerImpl" level="info" additivity="true">
+		<appender-ref ref="SipRollingFile" />
 	</logger>
 
-	<!--记录druid-sql的记录-->
-	<logger name="com.genersoft.iot.vmp.storager.dao" level="info" additivity="true">
-		<!--AppenderRef ref="Console"/-->
-		<appender-ref ref="RollingFileError"/>
-		<appender-ref ref="druidSqlRollingFile"/>
-	</logger>
 </configuration>