doc/_content/introduction/deployment.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/conf/ServerLoggerImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/conf/StackLoggerImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/logback-spring-local.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
doc/_content/introduction/deployment.md
@@ -28,7 +28,7 @@ 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 src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -65,7 +65,7 @@ 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; src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java
@@ -12,7 +12,7 @@ */ 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 @@ */ // * 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 @@ */ 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; } } src/main/java/com/genersoft/iot/vmp/gb28181/conf/ServerLoggerImpl.java
New file @@ -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(); } } } src/main/java/com/genersoft/iot/vmp/gb28181/conf/StackLoggerImpl.java
New file @@ -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; } } src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
@@ -105,7 +105,7 @@ } } } finally { logger.info("[SEND]:SUCCESS:{}", message); // logger.info("[SEND]:SUCCESS:{}", message); } } src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
@@ -67,8 +67,7 @@ @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(); // 先从会话内查找 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" /> <!--<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)" />--> <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"/> <!-- 控制台输出 --> <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> <!– 用过滤器,只接受ERROR级别的日志信息,其余全部过滤掉 –>--> <!-- <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>