Commit d79eec25b06b26491ae07f6f8dc02ba18eb77919

Authored by 648540858
1 parent b010e63d

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

doc/_content/introduction/deployment.md
@@ -28,7 +28,7 @@ jar包: @@ -28,7 +28,7 @@ jar包:
28 nohup java -jar wvp-pro-*.jar & 28 nohup java -jar wvp-pro-*.jar &
29 ``` 29 ```
30 war包: 30 war包:
31 -下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT, 31 +下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,将配置文件中的Server.port配置为与Tomcat端口一致
32 然后启动Tomcat。 32 然后启动Tomcat。
33 **启动ZLM** 33 **启动ZLM**
34 ```shell 34 ```shell
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -65,7 +65,7 @@ public class SipLayer implements CommandLineRunner { @@ -65,7 +65,7 @@ public class SipLayer implements CommandLineRunner {
65 private void addListeningPoint(String monitorIp, int port){ 65 private void addListeningPoint(String monitorIp, int port){
66 SipStackImpl sipStack; 66 SipStackImpl sipStack;
67 try { 67 try {
68 - sipStack = (SipStackImpl)sipFactory.createSipStack(DefaultProperties.getProperties(monitorIp, false, userSetting.getSipLog())); 68 + sipStack = (SipStackImpl)sipFactory.createSipStack(DefaultProperties.getProperties(monitorIp, userSetting.getSipLog()));
69 } catch (PeerUnavailableException e) { 69 } catch (PeerUnavailableException e) {
70 logger.error("[Sip Server] SIP服务启动失败, 监听地址{}失败,请检查ip是否正确", monitorIp); 70 logger.error("[Sip Server] SIP服务启动失败, 监听地址{}失败,请检查ip是否正确", monitorIp);
71 return; 71 return;
src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java
@@ -12,7 +12,7 @@ import java.util.Properties; @@ -12,7 +12,7 @@ import java.util.Properties;
12 */ 12 */
13 public class DefaultProperties { 13 public class DefaultProperties {
14 14
15 - public static Properties getProperties(String ip, boolean isDebug, boolean sipLog) { 15 + public static Properties getProperties(String ip, boolean sipLog) {
16 Properties properties = new Properties(); 16 Properties properties = new Properties();
17 properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP"); 17 properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP");
18 properties.setProperty("javax.sip.IP_ADDRESS", ip); 18 properties.setProperty("javax.sip.IP_ADDRESS", ip);
@@ -25,9 +25,6 @@ public class DefaultProperties { @@ -25,9 +25,6 @@ public class DefaultProperties {
25 */ 25 */
26 26
27 // * gov/nist/javax/sip/SipStackImpl.class 27 // * gov/nist/javax/sip/SipStackImpl.class
28 - if (isDebug) {  
29 - properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false");  
30 - }  
31 // 接收所有notify请求,即使没有订阅 28 // 接收所有notify请求,即使没有订阅
32 properties.setProperty("gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY", "true"); 29 properties.setProperty("gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY", "true");
33 properties.setProperty("gov.nist.javax.sip.AUTOMATIC_DIALOG_ERROR_HANDLING", "false"); 30 properties.setProperty("gov.nist.javax.sip.AUTOMATIC_DIALOG_ERROR_HANDLING", "false");
@@ -50,29 +47,13 @@ public class DefaultProperties { @@ -50,29 +47,13 @@ public class DefaultProperties {
50 */ 47 */
51 Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class); 48 Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class);
52 if (sipLog) { 49 if (sipLog) {
53 - if (logger.isDebugEnabled()) {  
54 - System.out.println("DEBUG");  
55 - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "DEBUG");  
56 - }else if (logger.isInfoEnabled()) {  
57 - System.out.println("INFO1");  
58 - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "INFO");  
59 - }else if (logger.isWarnEnabled()) {  
60 - System.out.println("WARNING");  
61 - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "WARNING");  
62 - }else if (logger.isErrorEnabled()) {  
63 - System.out.println("ERROR");  
64 - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "ERROR");  
65 - }else {  
66 - System.out.println("INFO2");  
67 - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "INFO");  
68 - }  
69 - logger.info("[SIP日志]级别为: {}", properties.getProperty("gov.nist.javax.sip.TRACE_LEVEL")); 50 + properties.setProperty("gov.nist.javax.sip.STACK_LOGGER", "com.genersoft.iot.vmp.gb28181.conf.StackLoggerImpl");
  51 + properties.setProperty("gov.nist.javax.sip.SERVER_LOGGER", "com.genersoft.iot.vmp.gb28181.conf.ServerLoggerImpl");
  52 + properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "true");
  53 + logger.info("[SIP日志]已开启");
70 }else { 54 }else {
71 logger.info("[SIP日志]已关闭"); 55 logger.info("[SIP日志]已关闭");
72 } 56 }
73 -  
74 -  
75 -  
76 return properties; 57 return properties;
77 } 58 }
78 } 59 }
src/main/java/com/genersoft/iot/vmp/gb28181/conf/ServerLoggerImpl.java 0 → 100644
  1 +package com.genersoft.iot.vmp.gb28181.conf;
  2 +
  3 +import gov.nist.core.ServerLogger;
  4 +import gov.nist.core.StackLogger;
  5 +import gov.nist.javax.sip.message.SIPMessage;
  6 +import gov.nist.javax.sip.stack.SIPTransactionStack;
  7 +
  8 +import javax.sip.SipStack;
  9 +import java.util.Properties;
  10 +
  11 +public class ServerLoggerImpl implements ServerLogger {
  12 +
  13 + private boolean showLog = true;
  14 +
  15 + private SIPTransactionStack sipStack;
  16 +
  17 + protected StackLogger stackLogger;
  18 +
  19 + @Override
  20 + public void closeLogFile() {
  21 +
  22 + }
  23 +
  24 + @Override
  25 + public void logMessage(SIPMessage message, String from, String to, boolean sender, long time) {
  26 + if (!showLog) {
  27 + return;
  28 + }
  29 + StringBuilder stringBuilder = new StringBuilder();
  30 + stringBuilder.append(!sender? "发送:目标--->" + from:"接收:来自--->" + to)
  31 + .append("\r\n")
  32 + .append(message);
  33 + this.stackLogger.logInfo(stringBuilder.toString());
  34 +
  35 + }
  36 +
  37 + @Override
  38 + public void logMessage(SIPMessage message, String from, String to, String status, boolean sender, long time) {
  39 + if (!showLog) {
  40 + return;
  41 + }
  42 + StringBuilder stringBuilder = new StringBuilder();
  43 + stringBuilder.append(!sender? "发送: 目标->" + from :"接收:来自->" + to)
  44 + .append("\r\n")
  45 + .append(message);
  46 + this.stackLogger.logInfo(stringBuilder.toString());
  47 + }
  48 +
  49 + @Override
  50 + public void logMessage(SIPMessage message, String from, String to, String status, boolean sender) {
  51 + if (!showLog) {
  52 + return;
  53 + }
  54 + StringBuilder stringBuilder = new StringBuilder();
  55 + stringBuilder.append(!sender? "发送: 目标->" + from :"接收:来自->" + to)
  56 + .append("\r\n")
  57 + .append(message);
  58 + this.stackLogger.logInfo(stringBuilder.toString());
  59 + }
  60 +
  61 + @Override
  62 + public void logException(Exception ex) {
  63 + if (!showLog) {
  64 + return;
  65 + }
  66 + this.stackLogger.logException(ex);
  67 + }
  68 +
  69 + @Override
  70 + public void setStackProperties(Properties stackProperties) {
  71 + if (!showLog) {
  72 + return;
  73 + }
  74 + String TRACE_LEVEL = stackProperties.getProperty("gov.nist.javax.sip.TRACE_LEVEL");
  75 + if (TRACE_LEVEL != null) {
  76 + showLog = true;
  77 + }
  78 + }
  79 +
  80 + @Override
  81 + public void setSipStack(SipStack sipStack) {
  82 + if (!showLog) {
  83 + return;
  84 + }
  85 + if(sipStack instanceof SIPTransactionStack) {
  86 + this.sipStack = (SIPTransactionStack)sipStack;
  87 + this.stackLogger = this.sipStack.getStackLogger();
  88 + }
  89 + }
  90 +
  91 +
  92 +}
src/main/java/com/genersoft/iot/vmp/gb28181/conf/StackLoggerImpl.java 0 → 100644
  1 +package com.genersoft.iot.vmp.gb28181.conf;
  2 +
  3 +import gov.nist.core.StackLogger;
  4 +import org.slf4j.Logger;
  5 +import org.slf4j.LoggerFactory;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +import java.util.Properties;
  9 +
  10 +@Component
  11 +public class StackLoggerImpl implements StackLogger {
  12 +
  13 + private final static Logger logger = LoggerFactory.getLogger(StackLoggerImpl.class);
  14 +
  15 + @Override
  16 + public void logStackTrace() {
  17 +
  18 + }
  19 +
  20 + @Override
  21 + public void logStackTrace(int traceLevel) {
  22 + System.out.println("traceLevel: " + traceLevel);
  23 + }
  24 +
  25 + @Override
  26 + public int getLineCount() {
  27 + return 0;
  28 + }
  29 +
  30 + @Override
  31 + public void logException(Throwable ex) {
  32 +
  33 + }
  34 +
  35 + @Override
  36 + public void logDebug(String message) {
  37 +// logger.debug(message);
  38 + }
  39 +
  40 + @Override
  41 + public void logDebug(String message, Exception ex) {
  42 +// logger.debug(message);
  43 + }
  44 +
  45 + @Override
  46 + public void logTrace(String message) {
  47 + logger.trace(message);
  48 + }
  49 +
  50 + @Override
  51 + public void logFatalError(String message) {
  52 +// logger.error(message);
  53 + }
  54 +
  55 + @Override
  56 + public void logError(String message) {
  57 +// logger.error(message);
  58 + }
  59 +
  60 + @Override
  61 + public boolean isLoggingEnabled() {
  62 + return true;
  63 + }
  64 +
  65 + @Override
  66 + public boolean isLoggingEnabled(int logLevel) {
  67 + return true;
  68 + }
  69 +
  70 + @Override
  71 + public void logError(String message, Exception ex) {
  72 +// logger.error(message);
  73 + }
  74 +
  75 + @Override
  76 + public void logWarning(String message) {
  77 + logger.warn(message);
  78 + }
  79 +
  80 + @Override
  81 + public void logInfo(String message) {
  82 + logger.info(message);
  83 + }
  84 +
  85 + @Override
  86 + public void disableLogging() {
  87 +
  88 + }
  89 +
  90 + @Override
  91 + public void enableLogging() {
  92 +
  93 + }
  94 +
  95 + @Override
  96 + public void setBuildTimeStamp(String buildTimeStamp) {
  97 +
  98 + }
  99 +
  100 + @Override
  101 + public void setStackProperties(Properties stackProperties) {
  102 +
  103 + }
  104 +
  105 + @Override
  106 + public String getLoggerName() {
  107 + return null;
  108 + }
  109 +}
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
@@ -105,7 +105,7 @@ public class SIPSender { @@ -105,7 +105,7 @@ public class SIPSender {
105 } 105 }
106 } 106 }
107 } finally { 107 } finally {
108 - logger.info("[SEND]:SUCCESS:{}", message); 108 +// logger.info("[SEND]:SUCCESS:{}", message);
109 } 109 }
110 } 110 }
111 111
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 @@ -67,8 +67,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
67 @Override 67 @Override
68 public void process(RequestEvent evt) { 68 public void process(RequestEvent evt) {
69 SIPRequest sipRequest = (SIPRequest)evt.getRequest(); 69 SIPRequest sipRequest = (SIPRequest)evt.getRequest();
70 - logger.info("接收到消息:" + evt.getRequest());  
71 - logger.debug("接收到消息:" + evt.getRequest()); 70 +// logger.info("接收到消息:" + evt.getRequest());
72 String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); 71 String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
73 CallIdHeader callIdHeader = sipRequest.getCallIdHeader(); 72 CallIdHeader callIdHeader = sipRequest.getCallIdHeader();
74 // 先从会话内查找 73 // 先从会话内查找
src/main/resources/logback-spring-local.xml
@@ -2,16 +2,22 @@ @@ -2,16 +2,22 @@
2 <configuration debug="false"> 2 <configuration debug="false">
3 <!--定义日志文件的存储地址 --> 3 <!--定义日志文件的存储地址 -->
4 <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/> 4 <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
5 - <property name="LOG_HOME" value="logs/${spring.application.name}" /> 5 + <property name="LOG_HOME" value="logs" />
  6 +
  7 + <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"/>
  8 +
  9 + <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
  10 + <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
  11 + <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
6 12
7 - <!--<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)" />-->  
8 <!-- 控制台输出 --> 13 <!-- 控制台输出 -->
9 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 14 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
10 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 15 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
11 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> 16 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
12 - <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern> 17 + <pattern>${log.pattern}</pattern>
  18 + <charset>UTF-8</charset>
13 </encoder> 19 </encoder>
14 - <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 20 + <filter class="ch.qos.logback.classic.filter.ThresholdFilter" >
15 <!--与ThresholdFilter的区别,允许onmatch--> 21 <!--与ThresholdFilter的区别,允许onmatch-->
16 <!--设置日志级别 接收info级别的日志--> 22 <!--设置日志级别 接收info级别的日志-->
17 <level>DEBUG</level> 23 <level>DEBUG</level>
@@ -32,6 +38,7 @@ @@ -32,6 +38,7 @@
32 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 38 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
33 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> 39 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
34 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern> 40 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
  41 + <charset>UTF-8</charset>
35 </encoder> 42 </encoder>
36 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 43 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
37 <!--与ThresholdFilter的区别,允许onmatch--> 44 <!--与ThresholdFilter的区别,允许onmatch-->
@@ -53,32 +60,16 @@ @@ -53,32 +60,16 @@
53 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 60 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
54 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> 61 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
55 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern> 62 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
  63 + <charset>UTF-8</charset>
56 </encoder> 64 </encoder>
57 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 65 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
58 <!--设置日志级别,过滤掉info日志,只输入error日志--> 66 <!--设置日志级别,过滤掉info日志,只输入error日志-->
59 <level>WARN</level> 67 <level>WARN</level>
60 - <!-- <onMatch>ACCEPT</onMatch> &lt;!&ndash; 用过滤器,只接受ERROR级别的日志信息,其余全部过滤掉 &ndash;&gt;-->  
61 - <!-- <onMismatch>DENY</onMismatch>-->  
62 </filter> 68 </filter>
63 </appender> 69 </appender>
64 70
65 - <!-- 生成 druid日志追加 -->  
66 - <appender name="druidSqlRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">  
67 - <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">  
68 - <!--历史日志文件输出的文件名 -->  
69 - <FileNamePattern>${LOG_HOME}/druid-%d{yyyy-MM-dd}.%i.log</FileNamePattern>  
70 - <!--日志文件保留天数 -->  
71 - <MaxHistory>30</MaxHistory>  
72 - <maxFileSize>50MB</maxFileSize>  
73 - </rollingPolicy>  
74 - <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">  
75 - <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->  
76 - <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>  
77 - </encoder>  
78 - </appender>  
79 -  
80 <!-- 生成 SIP日志追加 --> 71 <!-- 生成 SIP日志追加 -->
81 - <appender name="sipRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> 72 + <appender name="SipRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
82 <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 73 <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
83 <!--历史日志文件输出的文件名 --> 74 <!--历史日志文件输出的文件名 -->
84 <FileNamePattern>${LOG_HOME}/sip-%d{yyyy-MM-dd}.%i.log</FileNamePattern> 75 <FileNamePattern>${LOG_HOME}/sip-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
@@ -89,6 +80,7 @@ @@ -89,6 +80,7 @@
89 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 80 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
90 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> 81 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
91 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern> 82 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
  83 + <charset>UTF-8</charset>
92 </encoder> 84 </encoder>
93 </appender> 85 </appender>
94 86
@@ -98,20 +90,13 @@ @@ -98,20 +90,13 @@
98 <appender-ref ref="STDOUT" /> 90 <appender-ref ref="STDOUT" />
99 </root> 91 </root>
100 92
101 - <logger name="wvp" level="debug" additivity="true"> 93 + <logger name="com.genersoft.iot.vmp" level="info" additivity="true">
102 <appender-ref ref="RollingFileError"/> 94 <appender-ref ref="RollingFileError"/>
103 <appender-ref ref="RollingFile"/> 95 <appender-ref ref="RollingFile"/>
104 </logger> 96 </logger>
105 97
106 - <logger name="GB28181_SIP" level="debug" additivity="true">  
107 - <appender-ref ref="RollingFileError"/>  
108 - <appender-ref ref="sipRollingFile"/> 98 + <logger name="com.genersoft.iot.vmp.gb28181.conf.StackLoggerImpl" level="info" additivity="true">
  99 + <appender-ref ref="SipRollingFile" />
109 </logger> 100 </logger>
110 101
111 - <!--记录druid-sql的记录-->  
112 - <logger name="com.genersoft.iot.vmp.storager.dao" level="info" additivity="true">  
113 - <!--AppenderRef ref="Console"/-->  
114 - <appender-ref ref="RollingFileError"/>  
115 - <appender-ref ref="druidSqlRollingFile"/>  
116 - </logger>  
117 </configuration> 102 </configuration>
118 \ No newline at end of file 103 \ No newline at end of file