diff --git a/springboot/fastbee-admin/src/main/resources/logback.xml b/springboot/fastbee-admin/src/main/resources/logback.xml index 44322024..ba807867 100644 --- a/springboot/fastbee-admin/src/main/resources/logback.xml +++ b/springboot/fastbee-admin/src/main/resources/logback.xml @@ -1,7 +1,7 @@ - + @@ -95,6 +95,24 @@ + + + ${log.path}/rule/script.log + + + ${log.path}/rule/script.%d{yyyy-MM-dd}.log + + 3 + + + %d{HH:mm:ss.SSS} [%method,%line] - %msg%n + + + INFO + + + + @@ -115,4 +133,10 @@ + + + + + + diff --git a/springboot/fastbee-open-api/src/main/java/com/fastbee/data/controller/ScriptController.java b/springboot/fastbee-open-api/src/main/java/com/fastbee/data/controller/ScriptController.java index b49a044a..29eb6002 100644 --- a/springboot/fastbee-open-api/src/main/java/com/fastbee/data/controller/ScriptController.java +++ b/springboot/fastbee-open-api/src/main/java/com/fastbee/data/controller/ScriptController.java @@ -85,6 +85,16 @@ public class ScriptController extends BaseController return toAjax(scriptService.updateRuleScript(ruleScript)); } + /** + * 获取规则引擎脚本日志 + */ + @PreAuthorize("@ss.hasPermi('iot:script:query')") + @GetMapping(value = "/log/{scriptId}") + public AjaxResult getScriptLog(@PathVariable("scriptId") String scriptId) { + return success(scriptService.selectRuleScriptLog("script", scriptId)); + } + + /** * 删除规则引擎脚本 */ diff --git a/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/ruleEngine/MsgContext.java b/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/ruleEngine/MsgContext.java index 5b4f3168..1730318a 100644 --- a/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/ruleEngine/MsgContext.java +++ b/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/ruleEngine/MsgContext.java @@ -4,6 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Data @Builder @@ -11,11 +13,14 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class MsgContext { + private static Logger logger = LoggerFactory.getLogger("script"); + /** 消息主题 */ private String topic; /** 消息内容 */ private String payload; + /** * 设备编号 */ diff --git a/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IScriptService.java b/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IScriptService.java index 24cf4933..aa64c0da 100644 --- a/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IScriptService.java +++ b/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IScriptService.java @@ -22,6 +22,14 @@ public interface IScriptService */ public Script selectRuleScriptById(String scriptId); + /** + * 查询规则引擎脚本日志 + * + * @param id 规则引擎脚本主键 + * @return 规则引擎脚本 + */ + public String selectRuleScriptLog(String type, String id); + /** * 查询规则引擎脚本列表 * diff --git a/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ScriptServiceImpl.java b/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ScriptServiceImpl.java index 88ac3727..f629583c 100644 --- a/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ScriptServiceImpl.java +++ b/springboot/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ScriptServiceImpl.java @@ -12,10 +12,18 @@ import com.fastbee.iot.model.ScriptCondition; import com.fastbee.iot.service.IScriptService; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.script.ScriptExecutorFactory; +import org.apache.commons.io.input.ReversedLinesFileReader; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; +import ch.qos.logback.classic.LoggerContext; import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -50,6 +58,38 @@ public class ScriptServiceImpl implements IScriptService return ruleScriptMapper.selectRuleScriptById(scriptId); } + /** + * 查询规则引擎脚本日志 + * + * @param id 规则引擎脚本主键 + * @return 规则引擎脚本 + */ + + @Override + public String selectRuleScriptLog(String type, String id) { + // 获取日志存储路径 + LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); + String path = loggerContext.getProperty("log.path"); + + // 倒叙读取500条日志 + try { + List lines = new ArrayList<>(); + ReversedLinesFileReader reader = new ReversedLinesFileReader(new File(path + "/rule/" + type + ".log")); + String line = ""; + while ((line = reader.readLine()) != null && lines.size() < 500) { + String requestId = type + "/" + id; + if (line.contains(requestId)) { + lines.add(line); + } + } + Collections.reverse(lines); + return String.join("\n", lines); + } catch (IOException e) { + return "暂无日志,详情如下:\n" + e.toString(); + } + } + + /** * 查询规则引擎脚本列表 * diff --git a/vue/src/api/iot/script.js b/vue/src/api/iot/script.js index a39bf453..2a6d792b 100644 --- a/vue/src/api/iot/script.js +++ b/vue/src/api/iot/script.js @@ -17,6 +17,15 @@ export function getScript(scriptId) { }); } +// 查询规则引擎脚本日志 +export function getScriptLog(scriptId) { + return request({ + url: '/iot/script/log/' + scriptId, + method: 'get', + }); +} + + // 新增规则引擎脚本 export function addScript(data) { return request({ diff --git a/vue/src/views/iot/scene/script.vue b/vue/src/views/iot/scene/script.vue index 8b07ea3d..58ad8eec 100644 --- a/vue/src/views/iot/scene/script.vue +++ b/vue/src/views/iot/scene/script.vue @@ -48,6 +48,7 @@