pom.xml
@@ -99,12 +99,6 @@ <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.14</version> </dependency> <!-- å¨ææ°æ®æº --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> src/main/java/com/ard/alarm/camera/mapper/ArdCamerasMapper.java
@@ -2,7 +2,6 @@ import java.util.List; import com.ard.alarm.camera.domain.ArdCameras; import com.baomidou.dynamic.datasource.annotation.DS; import org.apache.ibatis.annotations.Mapper; /** @@ -12,7 +11,6 @@ * @date 2023-02-11 */ @Mapper @DS("master") public interface ArdCamerasMapper { /** src/main/java/com/ard/alarm/digitization/mapper/DataBridgeMapper.java
@@ -1,11 +1,9 @@ package com.ard.alarm.digitization.mapper; import com.ard.alarm.digitization.model.DataBridge; import com.baomidou.dynamic.datasource.annotation.DS; import org.apache.ibatis.annotations.Mapper; import java.util.List; @DS("oracle") @Mapper public interface DataBridgeMapper { src/main/java/com/ard/alarm/digitization/service/impl/DataBridgeServiceImpl.java
@@ -1,20 +1,19 @@ package com.ard.alarm.digitization.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ard.alarm.digitization.mapper.DataBridgeMapper; import com.ard.alarm.digitization.model.DataBridge; import com.ard.alarm.digitization.service.DataBridgeService; import com.ard.alarm.stealelec.domain.ArdAlarmStealelec; import com.ard.utils.jdbc.Query; import com.ard.utils.mqtt.MqttConsumer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Map; /** * @Description: @@ -23,29 +22,45 @@ * @Date: 2023å¹´09æ18æ¥16:41:50 **/ @Service @Slf4j(topic = "alarm") @Slf4j(topic = "digitization3") public class DataBridgeServiceImpl implements DataBridgeService { @Resource DataBridgeMapper databridgeMapper; public static Date lastTime; @Value("${spring.digitization3.enabled}") private Boolean enabled; @Scheduled(cron = "0/5 * * * * ?") public void alarmHandler() { List<DataBridge> dataBridgeList; try { List<DataBridge> dataBridgeList = selectDatabridgeList(new DataBridge()); if(!enabled) { return; } if (lastTime == null) { //忬¡æ¥è¯¢ï¼åªè·å10æ¡æè¿æ°æ®ã dataBridgeList = Query.getAlarmData(null, 10); if (dataBridgeList.size() > 0) { lastTime = dataBridgeList.get(0).getDateTime(); } } else { //æ¥è¯¢å¤§äºä¸æ¬¡æ¥è¯¢æå䏿¡æ°æ®çæ¶é´ dataBridgeList = Query.getAlarmData(lastTime, null); } if (dataBridgeList.size() > 0) { for (DataBridge data : dataBridgeList) { String[] elem = data.getValue().split(";"); data.setWellNo(elem[0]); data.setAlarmType(elem[1]); data.setAlarmTime(elem[2]); MqttConsumer.publish(2, false, "digitization3", JSON.toJSONString(data)); } } } catch (Exception ex) { log.error("3åæ°ååæ¥è¦æ°æ®æ¨éå¼å¸¸ï¼" + ex.getMessage()); log.error("3åæ°ååæ¥è¦æ°æ®å¤çå¼å¸¸ï¼" + ex.getMessage()); } } src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java
@@ -2,7 +2,6 @@ import java.util.List; import com.ard.alarm.external.domain.ArdEquipExternal; import com.baomidou.dynamic.datasource.annotation.DS; import org.apache.ibatis.annotations.Mapper; @@ -13,7 +12,6 @@ * @date 2023-03-13 */ @Mapper @DS("master") public interface ArdEquipExternalMapper { /** src/main/java/com/ard/alarm/radar/mapper/ArdEquipRadarMapper.java
@@ -2,7 +2,6 @@ import java.util.List; import com.ard.alarm.radar.domain.ArdEquipRadar; import com.baomidou.dynamic.datasource.annotation.DS; import org.apache.ibatis.annotations.Mapper; /** @@ -12,7 +11,6 @@ * @date 2023-03-11 */ @Mapper @DS("master") public interface ArdEquipRadarMapper { /** src/main/java/com/ard/alarm/stealelec/service/StealElecAlarmService.java
@@ -10,6 +10,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -29,7 +30,10 @@ RestTemplate restTemplate; @Value("${spring.stealelec.url}") private String stealElecUrl; @Value("${spring.stealelec.enabled}") private Boolean enabled; List<String> tempList=new ArrayList<>(); /** * @æè¿° è·åapiæ°æ®æ¨émqtt * @åæ° [] @@ -39,9 +43,12 @@ * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ @Async("alarm") // @Scheduled(cron="0/5 * * * * ?") @Scheduled(cron = "0/5 * * * * ?") public void alarmHandler() { try { if (!enabled) { return; } String allAlarmData = restTemplate.getForObject(stealElecUrl, String.class); //å餿æ\ç¬¦å· String message = allAlarmData.replaceAll("\\\\", ""); @@ -60,8 +67,7 @@ String JSONStr = JSON.toJSONString(object); //转æå®ä½å¯¹è±¡ ArdAlarmStealelec wd = JSON.parseObject(JSONStr, ArdAlarmStealelec.class); if(tempList.contains(wd.getId())) { if (tempList.contains(wd.getId())) { continue; } MqttConsumer.publish(2,false,"stealelec", JSON.toJSONString(wd)); src/main/java/com/ard/config/DruidConfig.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/jdbc/Conn.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ package com.ard.utils.jdbc; /** * @Description: * @ClassName: GetConn * @Author: åèä¹ * @Date: 2023å¹´09æ19æ¥13:12:38 **/ import org.springframework.core.io.ClassPathResource; import javax.annotation.Resource; import java.sql.*; import java.util.Properties; public class Conn { //jdbcè¿æ¥éè¦ç¨å°çä¸ä¸ªåæ° private String url="jdbc:oracle:thin:@//112.98.126.2:21521/orcl"; private String user="c##ard_user"; private String pwd="123456"; //å建ä¸ä¸ªå¯¹è±¡ 设置为éæç§æ ï¼å便¨¡å¼ï¼ private static Conn gc=null; //å°æé 彿°è®¾ä¸ºprivateå 鲿¢å¤é¨å®ä¾å对象 ï¼éè¿åå°æååºååå¯ä»¥ç ´è§£åä¾ï¼ private Conn(){}; //éæä»£ç åï¼å¨ç±»å è½½è¿å åæ¶å°±å®æå¯¹å¯¹è±¡çç¹æ®çåå§åï¼è¿ä¸ªå¨ä½åçå¨ç±»çæé 卿§è¡ä¹åï¼ä¹å°±æ¯å¨æ²¡æå¯¹è±¡åå¨çæ åµä¸ï¼éæä»£ç 就已ç»å®æäºå¯¹å¯¹è±¡çç¹æ®çå¤ç ï¼ï¼æ¤å¤çä½ç¨æ¯ï¼å½jdbcç驱å¨å¨å è½½æ¶ï¼å°±èªå¨å建ä¸ä¸ªèªå·±ã static{ try { //注åé©±å¨ Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //夿GetConnå®ä¾åç对象æ¯å¦åå¨ ä¸åå¨å°±å®ä¾åä¸ä¸ª //synchronized 线ç¨é 鲿¢å¤ä¸ªçº¿ç¨æ¢å èµæº 鲿¢æ»é public static Conn getGc(){ if(gc==null){ synchronized (Conn.class) { if(gc==null){ gc=new Conn(); } } } return gc; } //è¿åä¸ä¸ªConnectionè¿æ¥ public Connection getCon() throws SQLException{ return DriverManager.getConnection(url, user, pwd); } //éæ¾èµæº public void closeAll(ResultSet rs, Statement st, Connection con){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(st!=null){ try { st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } if(st!=null){ try { st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } src/main/java/com/ard/utils/jdbc/Query.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,72 @@ package com.ard.utils.jdbc; /** * @Description: * @ClassName: Query * @Author: åèä¹ * @Date: 2023å¹´09æ19æ¥13:01:28 **/ import com.ard.alarm.digitization.model.DataBridge; import lombok.extern.slf4j.Slf4j; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @Slf4j(topic = "digitization3") public class Query { static Connection conn = null; static Statement st = null; static ResultSet rs = null; public static List<DataBridge> getAlarmData(Date alarmTime, Integer rowNum) { List<DataBridge> dataBridgeList = new ArrayList<>(); try { //1ãè·åè¿æ¥å¯¹è±¡ conn = Conn.getGc().getCon(); //2ãå建statement类对象ï¼ç¨æ¥æ§è¡SQLè¯å¥ st = conn.createStatement(); //3ãå建sqlæ¥è¯¢è¯å¥ StringBuilder sbd = new StringBuilder(); String sql = "select * from (select * from DATABRIDGE order by DB_DATETIME desc ) where 1=1 "; sbd.append(sql); if (rowNum != null) { sbd.append(" and rownum <" + rowNum); } if (alarmTime != null) { SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); String Time = fmt.format(alarmTime); sbd.append(" and DB_DATETIME > to_date('" + Time + "','yyyy/mm/dd hh24:mi:ss')"); } //4ãæ§è¡sqlè¯å¥å¹¶ä¸æ¢åä¸ä¸ªæ¥è¯¢çç»æé rs = st.executeQuery(sbd.toString()); while (rs.next()) { //循ç¯éåç»æé DataBridge dataBridge = new DataBridge(); dataBridge.setId(rs.getString("DB_GUID")); dataBridge.setXmmc(rs.getString("DB_XMMC")); dataBridge.setFKey(rs.getString("DB_FKEY")); dataBridge.setFName(rs.getString("DB_FNAME")); dataBridge.setValue(rs.getString("DB_VALUE")); dataBridge.setDateTime(rs.getTimestamp("DB_DATETIME")); dataBridgeList.add(dataBridge); } return dataBridgeList; } catch (Exception e) { log.error("ä¸åæ°ååæ¥è¦æ¥è¯¢å¼å¸¸:" + e.getMessage()); return dataBridgeList; } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } src/main/resources/application-dev.yml
@@ -9,90 +9,26 @@ max-file-size: 30MB max-request-size: 30MB datasource: dynamic: primary: postgres #设置é»è®¤çæ°æ®æºæè æ°æ®æºç» strict: false #ä¸¥æ ¼å¹é æ°æ®æº,é»è®¤false. trueæªå¹é 尿宿°æ®æºæ¶æå¼å¸¸,false使ç¨é»è®¤æ°æ®æº druid: # å ¨å±druidåæ°ï¼åç¬æ°æ®æºé 置为空æ¶åå ¨å±é ç½® # è¿æ¥æ± çé ç½®ä¿¡æ¯ # åå§å大å°ï¼æå°ï¼æå¤§ initial-size: 1 min-idle: 2 maxActive: 8 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ maxWait: 60000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼å使¯æ¯«ç§ timeBetweenEvictionRunsMillis: 60000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§ minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheçå¤§å° poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # é ç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼'wall'ç¨äºé²ç«å¢ filters: stat,wall,slf4j # éè¿connectProperties屿§æ¥æå¼mergeSqlåè½ï¼æ ¢SQLè®°å½ connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 datasource: master: druid: #å¼å¯druidçæ§web stat-view-servlet: enabled: true driver-class-name: org.postgresql.Driver url: jdbc:postgresql://192.168.2.15:5432/ry-vue username: postgres password: postgres driver-class-name: org.postgresql.Driver druid: # é ç½®multi-datasource1 æ°æ®æºè¿æ¥æ± åæ° # è¿æ¥æ± çé ç½®ä¿¡æ¯ # åå§å大å°ï¼æå°ï¼æå¤§ initial-size: 2 min-idle: 2 maxActive: 2 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ maxWait: 600000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼å使¯æ¯«ç§ #æå¤§è¿æ¥æ° maxActive: 30 #æå°è¿æ¥æ° minIdle: 5 #è·åè¿æ¥çæå¤§çå¾ æ¶é´ maxWait: 10000 #è§£å³mysql8å°æ¶çé®é¢ validation-query: SELECT 'X' #空é²è¿æ¥çæ£æ¥æ¶é´é´é timeBetweenEvictionRunsMillis: 60000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§ #空é²è¿æ¥æå°ç©ºé²æ¶é´ minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 testWhileIdle: true testOnBorrow: false testOnReturn: false # æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheçå¤§å° poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # é ç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼'wall'ç¨äºé²ç«å¢ filters: stat,wall,slf4j # éè¿connectProperties屿§æ¥æå¼mergeSqlåè½ï¼æ ¢SQLè®°å½ connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 oracle: url: jdbc:oracle:thin:@//112.98.126.2:21521/orcl username: c##ard_user password: 123456 driver-class-name: oracle.jdbc.driver.OracleDriver druid: #é ç½®mysql é»è®¤è¿æ¥æ± åæ° # è¿æ¥æ± çé ç½®ä¿¡æ¯ # åå§å大å°ï¼æå°ï¼æå¤§ initial-size: 3 min-idle: 3 maxActive: 8 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ maxWait: 600000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼å使¯æ¯«ç§ timeBetweenEvictionRunsMillis: 60000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§ minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheçå¤§å° poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # é ç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼'wall'ç¨äºé²ç«å¢ filters: stat,wall,slf4j # éè¿connectProperties屿§æ¥æå¼mergeSqlåè½ï¼æ ¢SQLè®°å½ connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 # nettyé ç½® netty: udp: @@ -112,7 +48,11 @@ enabled: true # ççµæ¥å£å°å stealelec: enabled: false url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil # ä¸åæ°ååå°å digitization3: enabled: true # minioé ç½® minio: endpoint: http://192.168.2.15:9001 @@ -126,8 +66,10 @@ logging: level: hikSdk: info mqtt: debug netty: debug mqtt: info netty: info external: info camera: info tube: info digitization3: debug stealAlarm: info src/main/resources/application-prod.yml
@@ -49,8 +49,13 @@ timeout: 100 keepalive: 60 enabled: true # ççµæ¥å£å°å stealelec: enabled: false url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil # ä¸åæ°ååå°å digitization3: enabled: false mybatis: typeAliasesPackage: com.ard.alarm.**.domain mapperLocations: classpath:/mapper/*.xml @@ -60,7 +65,7 @@ logging: level: hikSdk: debug mqtt: info mqtt: debug netty: info external: info camera: info src/main/resources/logback-spring.xml
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <configuration> <!--æ¥å¿åæ¾è·¯å¾--> <property name="log.path" value="./alarmLogs"/> <property name="log.path" value="./logs"/> <!--æ¥å¿è¾åºæ ¼å¼--> <property name="log.pattern" value="%d{HH:mm:ss.SSS}[%thread]%-5level%logger{20}-[%method,%line]-%msg%n"/> <!--æ§å¶å°è¾åº--> @@ -45,14 +45,6 @@ <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--è¿æ»¤ç级å«--> <level>INFO</level> <!--å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼--> <onMatch>ACCEPT</onMatch> <!--ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--éç¨å çµæ¥è¦æ¥å¿è¾åº--> <appender name="camera" class="ch.qos.logback.core.rolling.RollingFileAppender"> @@ -67,14 +59,6 @@ <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--è¿æ»¤ç级å«--> <level>INFO</level> <!--å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼--> <onMatch>ACCEPT</onMatch> <!--ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--å¤èè®¾å¤æ¥è¦æ¥å¿è¾åº--> <appender name="external" class="ch.qos.logback.core.rolling.RollingFileAppender"> @@ -89,14 +73,6 @@ <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--è¿æ»¤ç级å«--> <level>INFO</level> <!--å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼--> <onMatch>ACCEPT</onMatch> <!--ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--Nettyæ¥å¿è¾åº--> <appender name="netty" class="ch.qos.logback.core.rolling.RollingFileAppender"> @@ -111,16 +87,8 @@ <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--è¿æ»¤ç级å«--> <level>INFO</level> <!--å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼--> <onMatch>ACCEPT</onMatch> <!--ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--Mqttæ¥å¿è¾åº--> <!--mqttæ¥å¿è¾åº--> <appender name="mqtt" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/mqtt.log</file> <!--å¾ªç¯æ¿çï¼åºäºæ¶é´å建æ¥å¿æä»¶--> @@ -133,14 +101,6 @@ <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--è¿æ»¤ç级å«--> <level>INFO</level> <!--å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼--> <onMatch>ACCEPT</onMatch> <!--ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--hikSdkæ¥å¿è¾åº--> <appender name="hikSdk" class="ch.qos.logback.core.rolling.RollingFileAppender"> @@ -155,6 +115,33 @@ <pattern>${log.pattern}</pattern> </encoder> </appender> <!--stealAlarmæ¥å¿è¾åº--> <appender name="stealAlarm" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/stealAlarm.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--æå¤©åæ»daily--> <fileNamePattern>${log.path}/stealAlarm.%d{yyyy-MM-dd}.log</fileNamePattern> <!--æ¥å¿æå¤§çåå²60天--> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!--digitization3æ¥å¿è¾åº--> <appender name="digitization3" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/digitization3.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--æå¤©åæ»daily--> <fileNamePattern>${log.path}/digitization3.%d{yyyy-MM-dd}.log</fileNamePattern> <!--æ¥å¿æå¤§çåå²60天--> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="console"/> </root> @@ -162,5 +149,39 @@ <root level="INFO"> <appender-ref ref="sys-info"/> </root> <!--tubeæä½æ¥å¿--> <logger name="tube" level="INFO"> <appender-ref ref="tube"/> </logger> <!--cameraæä½æ¥å¿--> <logger name="camera" level="INFO"> <appender-ref ref="camera"/> </logger> <!--externalæä½æ¥å¿--> <logger name="external" level="INFO"> <appender-ref ref="external"/> </logger> <!--nettyæä½æ¥å¿--> <logger name="netty" level="INFO"> <appender-ref ref="netty"/> </logger> <!--mqttæä½æ¥å¿--> <logger name="mqtt" level="DEBUG"> <appender-ref ref="mqtt"/> </logger> <!--hikSdkæä½æ¥å¿--> <logger name="hikSdk" level="INFO"> <appender-ref ref="hikSdk"/> </logger> <!--digitization3æä½æ¥å¿--> <logger name="digitization3" level="INFO"> <appender-ref ref="digitization3"/> </logger> <!--stealAlarmæä½æ¥å¿--> <logger name="stealAlarm" level="INFO"> <appender-ref ref="stealAlarm"/> </logger> </configuration>