mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-29 16:06:36 +08:00
增加日志输出
This commit is contained in:
@@ -137,9 +137,9 @@ public class LogAspect {
|
||||
);
|
||||
|
||||
// 打印单条完整异常日志
|
||||
log.error(errorMessage, ex);
|
||||
log.info(errorMessage, ex);
|
||||
} catch (Exception e) {
|
||||
log.error("记录异常日志时出错: {}", e.getMessage());
|
||||
log.info("记录异常日志时出错: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -21,20 +21,20 @@ public class GlobalExceptionHandler {
|
||||
public R MethodArgumentNotValidException(MethodArgumentNotValidException e) {
|
||||
BindingResult result = e.getBindingResult();
|
||||
ObjectError objectError = result.getAllErrors().stream().findFirst().get();
|
||||
log.error("实体校验异常:----------------{}", objectError.getDefaultMessage());
|
||||
log.info("实体校验异常:----------------{}", objectError.getDefaultMessage());
|
||||
return R.err(500, objectError.getDefaultMessage());
|
||||
}
|
||||
|
||||
// 未授权异常捕获
|
||||
@ExceptionHandler(value = UnauthorizedException.class)
|
||||
public R handleUnauthorizedException(UnauthorizedException e) {
|
||||
log.error("未授权异常:----------------{}", e.getMessage());
|
||||
log.info("未授权异常:----------------{}", e.getMessage());
|
||||
return R.err(401, e.getMessage());
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
public R Exception(Exception e){
|
||||
log.error("异常:----------------{}", e.getMessage());
|
||||
log.info("异常:----------------{}", e.getMessage());
|
||||
return R.err(-2, e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ public class CheckGostConfigAsync {
|
||||
if (Objects.equals(type, "tcp")) { // 只处理TCP,避免重复处理
|
||||
Forward forward = forwardService.getById(forwardId);
|
||||
if (forward == null) {
|
||||
log.warn("删除孤立的服务: {} (节点: {})", service.getName(), node.getId());
|
||||
log.info("删除孤立的服务: {} (节点: {})", service.getName(), node.getId());
|
||||
GostDto gostDto = GostUtil.DeleteService(node.getId(), forwardId + "_" + userId + "_" + userTunnelId);
|
||||
System.out.println(gostDto);
|
||||
}
|
||||
@@ -82,7 +82,7 @@ public class CheckGostConfigAsync {
|
||||
if (Objects.equals(type, "tls")) {
|
||||
Forward forward = forwardService.getById(forwardId);
|
||||
if (forward == null) {
|
||||
log.warn("删除孤立的服务: {} (节点: {})", service.getName(), node.getId());
|
||||
log.info("删除孤立的服务: {} (节点: {})", service.getName(), node.getId());
|
||||
GostUtil.DeleteRemoteService(node.getId(), forwardId+"_"+userId+"_"+userTunnelId);
|
||||
}
|
||||
}
|
||||
@@ -112,7 +112,7 @@ public class CheckGostConfigAsync {
|
||||
if (Objects.equals(type, "chains")) {
|
||||
Forward forward = forwardService.getById(forwardId);
|
||||
if (forward == null) {
|
||||
log.warn("删除孤立的链: {} (节点: {})", chain.getName(), node.getId());
|
||||
log.info("删除孤立的链: {} (节点: {})", chain.getName(), node.getId());
|
||||
GostUtil.DeleteChains(node.getId(), forwardId+"_"+userId+"_"+userTunnelId);
|
||||
}
|
||||
}
|
||||
@@ -134,7 +134,7 @@ public class CheckGostConfigAsync {
|
||||
safeExecute(() -> {
|
||||
SpeedLimit speedLimit = speedLimitService.getById(limiter.getName());
|
||||
if (speedLimit == null) {
|
||||
log.warn("删除孤立的限流器: {} (节点: {})", limiter.getName(), node.getId());
|
||||
log.info("删除孤立的限流器: {} (节点: {})", limiter.getName(), node.getId());
|
||||
GostUtil.DeleteLimiters(node.getId(), Long.parseLong(limiter.getName()));
|
||||
}
|
||||
}, "清理限流器 " + limiter.getName());
|
||||
@@ -148,7 +148,7 @@ public class CheckGostConfigAsync {
|
||||
try {
|
||||
operation.run();
|
||||
} catch (Exception e) {
|
||||
log.error("执行操作失败: {}", operationDesc, e);
|
||||
log.info("执行操作失败: {}", operationDesc, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ public class ResetFlowAsync {
|
||||
log.info("到期任务执行完成");
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("定时任务执行失败", e);
|
||||
log.info("定时任务执行失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,12 +126,12 @@ public class ResetFlowAsync {
|
||||
log.info("用户[ID: {}, 用户名: {}]流量重置成功,重置日期: 每月{}号",
|
||||
user.getId(), user.getUser(), user.getFlowResetTime());
|
||||
} else {
|
||||
log.error("用户[ID: {}, 用户名: {}]流量重置失败", user.getId(), user.getUser());
|
||||
log.info("用户[ID: {}, 用户名: {}]流量重置失败", user.getId(), user.getUser());
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("重置用户流量失败", e);
|
||||
log.info("重置用户流量失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,13 +179,13 @@ public class ResetFlowAsync {
|
||||
log.info("用户隧道[ID: {}, 用户ID: {}, 隧道ID: {}]流量重置成功,重置日期: 每月{}号",
|
||||
userTunnel.getId(), userTunnel.getUserId(), userTunnel.getTunnelId(), userTunnel.getFlowResetTime());
|
||||
} else {
|
||||
log.error("用户隧道[ID: {}, 用户ID: {}, 隧道ID: {}]流量重置失败",
|
||||
log.info("用户隧道[ID: {}, 用户ID: {}, 隧道ID: {}]流量重置失败",
|
||||
userTunnel.getId(), userTunnel.getUserId(), userTunnel.getTunnelId());
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("重置用户隧道流量失败", e);
|
||||
log.info("重置用户隧道流量失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,9 +42,9 @@ public class AESCrypto {
|
||||
this.secretKey = new SecretKeySpec(keyBytes, ALGORITHM);
|
||||
this.secureRandom = new SecureRandom();
|
||||
|
||||
log.debug("AES加密器初始化成功");
|
||||
log.info("AES加密器初始化成功");
|
||||
} catch (Exception e) {
|
||||
log.error("AES加密器初始化失败", e);
|
||||
log.info("AES加密器初始化失败", e);
|
||||
throw new RuntimeException("AES加密器初始化失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
@@ -83,7 +83,7 @@ public class AESCrypto {
|
||||
return Base64.getEncoder().encodeToString(buffer.array());
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("数据加密失败", e);
|
||||
log.info("数据加密失败", e);
|
||||
throw new RuntimeException("数据加密失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
@@ -137,7 +137,7 @@ public class AESCrypto {
|
||||
return cipher.doFinal(ciphertext);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("数据解密失败", e);
|
||||
log.info("数据解密失败", e);
|
||||
throw new RuntimeException("数据解密失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
@@ -161,7 +161,7 @@ public class AESCrypto {
|
||||
try {
|
||||
return new AESCrypto(secret);
|
||||
} catch (Exception e) {
|
||||
log.error("创建AES加密器失败: {}", e.getMessage());
|
||||
log.info("创建AES加密器失败: {}", e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("处理响应消息失败: {}", e.getMessage(), e);
|
||||
log.info("处理响应消息失败: {}", e.getMessage(), e);
|
||||
}
|
||||
} else {
|
||||
log.info("收到消息: {}", decryptedPayload);
|
||||
@@ -135,7 +135,7 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("处理WebSocket消息时发生异常: {}", e.getMessage(), e);
|
||||
log.info("处理WebSocket消息时发生异常: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,18 +155,18 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
// 获取或创建加密器
|
||||
AESCrypto crypto = getOrCreateCrypto(nodeSecret);
|
||||
if (crypto == null) {
|
||||
log.warn("⚠️ 收到加密消息但无法创建解密器,使用原始数据");
|
||||
log.info("⚠️ 收到加密消息但无法创建解密器,使用原始数据");
|
||||
return payload;
|
||||
}
|
||||
|
||||
// 解密数据
|
||||
String decryptedData = crypto.decryptString(encryptedMessage.getData());
|
||||
log.debug("🔓 WebSocket消息解密成功");
|
||||
log.info("🔓 WebSocket消息解密成功");
|
||||
return decryptedData;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 解析失败,可能是非加密格式,直接返回原始数据
|
||||
log.debug("WebSocket消息未加密或解密失败,使用原始数据: {}", e.getMessage());
|
||||
log.info("WebSocket消息未加密或解密失败,使用原始数据: {}", e.getMessage());
|
||||
}
|
||||
|
||||
return payload;
|
||||
@@ -191,11 +191,11 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
encryptedMessage.put("data", encryptedData);
|
||||
encryptedMessage.put("timestamp", System.currentTimeMillis());
|
||||
|
||||
log.debug("🔐 WebSocket消息加密成功");
|
||||
log.info("🔐 WebSocket消息加密成功");
|
||||
return encryptedMessage.toJSONString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("⚠️ WebSocket消息加密失败,发送原始数据: {}", e.getMessage());
|
||||
log.info("⚠️ WebSocket消息加密失败,发送原始数据: {}", e.getMessage());
|
||||
}
|
||||
|
||||
return message;
|
||||
@@ -232,7 +232,7 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
// 检查是否已有该节点的连接,如果有则记录日志但直接覆盖
|
||||
WebSocketSession existingSession = nodeSessions.get(nodeId);
|
||||
if (existingSession != null && existingSession.isOpen()) {
|
||||
log.warn("节点 {} 已有连接存在: {},新连接将覆盖旧连接", nodeId, existingSession.getId());
|
||||
log.info("节点 {} 已有连接存在: {},新连接将覆盖旧连接", nodeId, existingSession.getId());
|
||||
// 清理旧连接的锁对象
|
||||
sessionLocks.remove(existingSession.getId());
|
||||
}
|
||||
@@ -246,7 +246,7 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
log.info("主动关闭节点 {} 的旧连接: {}", nodeId, existingSession.getId());
|
||||
existingSession.close();
|
||||
} catch (Exception e) {
|
||||
log.error("关闭节点 {} 旧连接失败: {}", nodeId, e.getMessage());
|
||||
log.info("关闭节点 {} 旧连接失败: {}", nodeId, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -270,17 +270,17 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
res.put("data", 1);
|
||||
broadcastMessage(res.toJSONString());
|
||||
} else {
|
||||
log.error("节点 {} 状态更新失败", nodeId);
|
||||
log.info("节点 {} 状态更新失败", nodeId);
|
||||
}
|
||||
} else {
|
||||
log.error("节点 {} 不存在,无法更新状态", nodeId);
|
||||
log.info("节点 {} 不存在,无法更新状态", nodeId);
|
||||
// 移除无效的会话
|
||||
nodeSessions.remove(nodeId);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("建立连接时发生异常: {}", e.getMessage(), e);
|
||||
log.info("建立连接时发生异常: {}", e.getMessage(), e);
|
||||
// 异常情况下,确保清理会话
|
||||
try {
|
||||
String id = session.getAttributes().get("id").toString();
|
||||
@@ -288,10 +288,10 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
if (Objects.equals(type, "1")) {
|
||||
Long nodeId = Long.valueOf(id);
|
||||
nodeSessions.remove(nodeId);
|
||||
log.warn("由于异常,移除节点 {} 的会话", nodeId);
|
||||
log.info("由于异常,移除节点 {} 的会话", nodeId);
|
||||
}
|
||||
} catch (Exception cleanupException) {
|
||||
log.error("清理异常会话时出错: {}", cleanupException.getMessage());
|
||||
log.info("清理异常会话时出错: {}", cleanupException.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -341,10 +341,10 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
res.put("data", 0);
|
||||
broadcastMessage(res.toJSONString());
|
||||
} else {
|
||||
log.error("节点 {} 状态更新为离线失败", nodeId);
|
||||
log.info("节点 {} 状态更新为离线失败", nodeId);
|
||||
}
|
||||
} else {
|
||||
log.warn("节点 {} 不存在,无法更新离线状态", nodeId);
|
||||
log.info("节点 {} 不存在,无法更新离线状态", nodeId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,7 +352,7 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
sessionLocks.remove(sessionId);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("关闭连接时发生异常: {}", e.getMessage(), e);
|
||||
log.info("关闭连接时发生异常: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -383,7 +383,7 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
socketSession.sendMessage(new TextMessage(finalMessage));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("发送WebSocket消息失败 [sessionId={}]: {}", sessionId, e.getMessage());
|
||||
log.info("发送WebSocket消息失败 [sessionId={}]: {}", sessionId, e.getMessage());
|
||||
cleanupSession(socketSession);
|
||||
}
|
||||
}
|
||||
@@ -428,14 +428,14 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
WebSocketSession nodeSession = nodeSessions.get(node_id);
|
||||
|
||||
if (nodeSession == null) {
|
||||
log.warn("发送消息失败:节点 {} 不在线或会话不存在", node_id);
|
||||
log.info("发送消息失败:节点 {} 不在线或会话不存在", node_id);
|
||||
GostDto result = new GostDto();
|
||||
result.setMsg("节点不在线");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!nodeSession.isOpen()) {
|
||||
log.warn("发送消息失败:节点 {} 连接已断开,清理会话", node_id);
|
||||
log.info("发送消息失败:节点 {} 连接已断开,清理会话", node_id);
|
||||
nodeSessions.remove(node_id);
|
||||
sessionLocks.remove(nodeSession.getId());
|
||||
GostDto result = new GostDto();
|
||||
@@ -461,7 +461,7 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
sendToUser(nodeSession, data.toJSONString(), nodeSecret);
|
||||
GostDto result = future.get(10, TimeUnit.SECONDS);
|
||||
|
||||
log.debug("成功发送消息到节点 {} 并收到响应: {}", node_id, result.getMsg());
|
||||
log.info("成功发送消息到节点 {} 并收到响应: {}", node_id, result.getMsg());
|
||||
return result;
|
||||
|
||||
} catch (Exception e) {
|
||||
@@ -471,10 +471,10 @@ public class WebSocketServer extends TextWebSocketHandler {
|
||||
GostDto result = new GostDto();
|
||||
if (e instanceof java.util.concurrent.TimeoutException) {
|
||||
result.setMsg("等待响应超时");
|
||||
log.warn("节点 {} 响应超时,可能存在连接问题", node_id);
|
||||
log.info("节点 {} 响应超时,可能存在连接问题", node_id);
|
||||
} else {
|
||||
result.setMsg("发送消息失败: " + e.getMessage());
|
||||
log.error("发送消息到节点 {} 失败: {}", node_id, e.getMessage(), e);
|
||||
log.info("发送消息到节点 {} 失败: {}", node_id, e.getMessage(), e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class EncryptionConfig {
|
||||
public static void clearCrypto(String secret) {
|
||||
if (secret != null) {
|
||||
CRYPTO_CACHE.remove(secret);
|
||||
log.debug("已清理密钥对应的加密器实例");
|
||||
log.info("已清理密钥对应的加密器实例");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.admin.config;
|
||||
|
||||
|
||||
import com.admin.common.utils.IpUtils;
|
||||
import com.admin.common.utils.JwtUtil;
|
||||
import com.admin.entity.Node;
|
||||
import com.admin.service.NodeService;
|
||||
@@ -14,6 +15,7 @@ import org.springframework.web.socket.WebSocketHandler;
|
||||
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -37,9 +39,10 @@ public class WebSocketInterceptor extends HttpSessionHandshakeInterceptor {
|
||||
String type = serverHttpRequest.getServletRequest().getParameter("type");
|
||||
String version = serverHttpRequest.getServletRequest().getParameter("version");
|
||||
if (Objects.equals(type, "1")) {
|
||||
System.out.println("type: " + type + " - version: " + version + " - secret: " + secret + " - IP: " + getClientIp(request));
|
||||
Node node = nodeService.getOne(new QueryWrapper<Node>().eq("secret", secret));
|
||||
if (node == null) {
|
||||
log.warn("节点验证失败:未找到匹配的secret");
|
||||
log.info("节点验证失败:未找到匹配的secret");
|
||||
return false;
|
||||
}
|
||||
attributes.put("id", node.getId());
|
||||
@@ -56,5 +59,13 @@ public class WebSocketInterceptor extends HttpSessionHandshakeInterceptor {
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getClientIp(ServerHttpRequest request) {
|
||||
InetSocketAddress remoteAddress = request.getRemoteAddress();
|
||||
if (remoteAddress != null) {
|
||||
return remoteAddress.getAddress().getHostAddress();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ public class FlowController extends BaseController {
|
||||
}
|
||||
|
||||
// 记录日志
|
||||
log.debug("🔓 节点流量数据接收成功{}", isEncryptedMessage(rawData) ? "(已解密)" : "");
|
||||
log.info("🔓 节点流量数据接收成功{}", isEncryptedMessage(rawData) ? "(已解密)" : "");
|
||||
|
||||
// 4. 处理流量数据
|
||||
return processFlowData(flowDataList);
|
||||
@@ -193,18 +193,18 @@ public class FlowController extends BaseController {
|
||||
// 获取或创建加密器
|
||||
AESCrypto crypto = getOrCreateCrypto(secret);
|
||||
if (crypto == null) {
|
||||
log.warn("⚠️ 收到加密消息但无法创建解密器,使用原始数据");
|
||||
log.info("⚠️ 收到加密消息但无法创建解密器,使用原始数据");
|
||||
return rawData;
|
||||
}
|
||||
|
||||
// 解密数据
|
||||
String decryptedData = crypto.decryptString(encryptedMessage.getData());
|
||||
log.debug("🔓 数据解密成功");
|
||||
log.info("🔓 数据解密成功");
|
||||
return decryptedData;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 解析失败,可能是非加密格式,直接返回原始数据
|
||||
log.debug("数据未加密或解密失败,使用原始数据: {}", e.getMessage());
|
||||
log.info("数据未加密或解密失败,使用原始数据: {}", e.getMessage());
|
||||
}
|
||||
|
||||
return rawData;
|
||||
|
||||
@@ -1060,7 +1060,7 @@ public class ForwardServiceImpl extends ServiceImpl<ForwardMapper, Forward> impl
|
||||
R deleteResult = deleteOldGostServices(existForward, oldTunnel);
|
||||
if (deleteResult.getCode() != 0) {
|
||||
// 删除失败时记录日志,但不影响后续创建(可能原配置已不存在)
|
||||
log.warn("删除原隧道{}的Gost配置失败: {}", oldTunnel.getId(), deleteResult.getMsg());
|
||||
log.info("删除原隧道{}的Gost配置失败: {}", oldTunnel.getId(), deleteResult.getMsg());
|
||||
}
|
||||
|
||||
// 3. 创建新的Gost服务配置
|
||||
@@ -1088,7 +1088,7 @@ public class ForwardServiceImpl extends ServiceImpl<ForwardMapper, Forward> impl
|
||||
if (!oldNodeInfo.isHasError() && oldNodeInfo.getInNode() != null) {
|
||||
GostDto serviceResult = GostUtil.DeleteService(oldNodeInfo.getInNode().getId(), serviceName);
|
||||
if (!isGostOperationSuccess(serviceResult)) {
|
||||
log.warn("删除主服务失败: {}", serviceResult.getMsg());
|
||||
log.info("删除主服务失败: {}", serviceResult.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1098,7 +1098,7 @@ public class ForwardServiceImpl extends ServiceImpl<ForwardMapper, Forward> impl
|
||||
if (!oldNodeInfo.isHasError() && oldNodeInfo.getInNode() != null) {
|
||||
GostDto chainResult = GostUtil.DeleteChains(oldNodeInfo.getInNode().getId(), serviceName);
|
||||
if (!isGostOperationSuccess(chainResult)) {
|
||||
log.warn("删除链服务失败: {}", chainResult.getMsg());
|
||||
log.info("删除链服务失败: {}", chainResult.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1114,7 +1114,7 @@ public class ForwardServiceImpl extends ServiceImpl<ForwardMapper, Forward> impl
|
||||
if (outNode != null) {
|
||||
GostDto remoteResult = GostUtil.DeleteRemoteService(outNode.getId(), serviceName);
|
||||
if (!isGostOperationSuccess(remoteResult)) {
|
||||
log.warn("删除远程服务失败: {}", remoteResult.getMsg());
|
||||
log.info("删除远程服务失败: {}", remoteResult.getMsg());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -762,7 +762,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
|
||||
}
|
||||
}
|
||||
|
||||
log.debug("用户 {} 获取到 {} 条实际记录,补齐为 {} 条24小时记录", userId, recentFlows.size(), result.size());
|
||||
log.info("用户 {} 获取到 {} 条实际记录,补齐为 {} 条24小时记录", userId, recentFlows.size(), result.size());
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user