diff --git a/pom.xml b/pom.xml index 94627f0..88f1555 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ cn.metona metona-mq-mini-pro - 1.0.1 + 1.0.2 diff --git a/src/main/java/cn/somkit/fmt/FmtApplication.java b/src/main/java/cn/somkit/fmt/FmtApplication.java index dd84694..513204a 100644 --- a/src/main/java/cn/somkit/fmt/FmtApplication.java +++ b/src/main/java/cn/somkit/fmt/FmtApplication.java @@ -1,8 +1,5 @@ package cn.somkit.fmt; -import cn.metona.mq.consumer.MessageListener; -import cn.metona.mq.core.Message; -import cn.metona.mq.exception.MessageConsumeException; import cn.metona.mq.util.MetonaMQUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/cn/somkit/fmt/action/UploadAction.java b/src/main/java/cn/somkit/fmt/action/UploadAction.java index 2014d39..96b5a78 100644 --- a/src/main/java/cn/somkit/fmt/action/UploadAction.java +++ b/src/main/java/cn/somkit/fmt/action/UploadAction.java @@ -2,6 +2,8 @@ package cn.somkit.fmt.action; import cn.somkit.fmt.utils.OsInfoUtil; import jakarta.servlet.http.HttpServletRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @@ -18,6 +20,8 @@ import java.util.*; @RequestMapping("/upload") public class UploadAction { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Value("${somkit.upload.path.windows}") private String windows_path; @@ -40,7 +44,7 @@ public class UploadAction { try { this.saveFile(file); // 保存上传信息 } catch (Exception e) { - e.printStackTrace(); + logger.error("文件保存失败:{}", e.getMessage()); } } } @@ -56,14 +60,19 @@ public class UploadAction { * @throws Exception 上传异常 */ public void saveFile(MultipartFile file) throws Exception { - String path = OsInfoUtil.isWindows() ? windows_path : - OsInfoUtil.isLinux() ? linux_path : null; - assert path != null; - String filePath = ""; - if (file != null && file.getSize() > 0) { // 有文件上传 - filePath = path + File.separator + file.getOriginalFilename(); - File saveFile = new File(filePath) ; - file.transferTo(saveFile); // 文件保存 + try { + String path = OsInfoUtil.isWindows() ? windows_path : + OsInfoUtil.isLinux() ? linux_path : null; + assert path != null; + String filePath = ""; + if (file != null && file.getSize() > 0) { // 有文件上传 + filePath = path + File.separator + file.getOriginalFilename(); + File saveFile = new File(filePath) ; + file.transferTo(saveFile); // 文件保存 + logger.info("文件保存成功:{}", filePath); + } + } catch (Exception e) { + throw new RuntimeException(e); } } } diff --git a/src/main/java/cn/somkit/fmt/filter/LogStashFilter.java b/src/main/java/cn/somkit/fmt/filter/LogStashFilter.java index 3ae8c2a..87fe46d 100644 --- a/src/main/java/cn/somkit/fmt/filter/LogStashFilter.java +++ b/src/main/java/cn/somkit/fmt/filter/LogStashFilter.java @@ -30,7 +30,6 @@ public class LogStashFilter extends Filter { "yyyy-MM-dd HH:mm:ss.SSS") ); try { - System.out.println(MetonaMQUtil.getConsumerStatus()); if(MetonaMQUtil.isInitialized() && MetonaMQUtil.isOrderedConsumerRunning()){ MetonaMQUtil.send("log-topic", "log-monitor", JSONUtil.toJsonStr(msg)); } diff --git a/src/main/java/cn/somkit/fmt/socket/WebSocketServerHandler.java b/src/main/java/cn/somkit/fmt/socket/WebSocketServerHandler.java index 382fd41..23446d4 100644 --- a/src/main/java/cn/somkit/fmt/socket/WebSocketServerHandler.java +++ b/src/main/java/cn/somkit/fmt/socket/WebSocketServerHandler.java @@ -30,7 +30,7 @@ public class WebSocketServerHandler implements WebSocketHandler { boolean closed = StrUtil.isNotBlank(cache.get("closed")) && Boolean.parseBoolean(cache.get("closed")); if(!closed){ try { - if(MetonaMQUtil.isInitialized()){ + if(MetonaMQUtil.isInitialized() && !MetonaMQUtil.isOrderedConsumerRunning()){ logger.info("Metona MQ Mini Pro 订阅主题(log-topic)(顺序消息)..."); MetonaMQUtil.subscribeOrdered("log-topic", new MessageListener() { @Override @@ -43,10 +43,8 @@ public class WebSocketServerHandler implements WebSocketHandler { } }); - if(!MetonaMQUtil.isOrderedConsumerRunning()){ - logger.info("Metona MQ Mini Pro 启动消费者(顺序消息)..."); - MetonaMQUtil.startOrderedConsuming(); - } + logger.info("Metona MQ Mini Pro 启动消费者(顺序消息)..."); + MetonaMQUtil.startOrderedConsuming(); } } catch (Exception e) { logger.error("Metona MQ Mini Pro 异常", e); diff --git a/src/main/resources/static/common/js/LogMonitorAdaptive.js b/src/main/resources/static/common/js/LogMonitorAdaptive.js index 8bf7ff8..34025a5 100644 --- a/src/main/resources/static/common/js/LogMonitorAdaptive.js +++ b/src/main/resources/static/common/js/LogMonitorAdaptive.js @@ -309,7 +309,7 @@ class LogMonitorAdaptive { debug: '#9c27b0', info: '#2196f3', warn: '#ff9800', error: '#f44336', success: '#4caf50', system: '#00bcd4' }; - lvlSpan.style.color = colors[entry.level] || colors.info; + lvlSpan.style.color = colors[entry.level.toLowerCase()] || colors.info; lvlSpan.style.minWidth = '70px'; lvlSpan.style.fontWeight = 'bold'; line.appendChild(lvlSpan); diff --git a/src/main/resources/templates/logging.html b/src/main/resources/templates/logging.html index c37a76a..d3c0224 100644 --- a/src/main/resources/templates/logging.html +++ b/src/main/resources/templates/logging.html @@ -14,6 +14,18 @@ let ws = null; + let logMonitor = async (closed = false) => { + const options = { + url: Fmt.ctx() + '/logging/close', + data: {closed: closed}, + method: 'post' + }; + await Fmt.axios(options).then(() => {}).catch((err) => console.error(err)); + if(ws){ + ws.send('发送日志'); + } + } + const logger = new LogMonitorAdaptive('#logContainer', { theme: 'dark', maxLines: 10000, @@ -32,13 +44,7 @@ wordWrap: true, // 日志内容是否自动换行(true=换行,false=横向滚动) //暂停/继续 回调函数 onTogglePause: async (isPaused) => { - const options = { - url: Fmt.ctx() + '/logging/close', - data: {closed: isPaused}, - method: 'post' - }; - await Fmt.axios(options).then((result) => console.log(result)).catch((err) => console.error(err)); - ws.send('发送日志'); + await logMonitor(isPaused); }, onCreated: () => { console.log('日志容器已创建'); @@ -53,6 +59,10 @@ return false; } + ws.onopen = function () { + + } + ws.onmessage = function (event) { if(event.data){ let data = JSON.parse(event.data);