# AMT 功能无日志问题修复指南 ## 问题描述 点击"测试连接"后,后端没有任何日志输出,直接显示超时错误。 ## 可能原因 1. **代码未编译**:新添加的代码没有被编译 2. **后端未重启**:修改后没有重启后端服务 3. **请求未到达后端**:前端请求没有正确发送到后端 4. **端口问题**:后端端口被占用或配置错误 ## 解决步骤 ### 步骤 1:停止当前后端服务 如果后端正在运行,先停止它: - 在运行后端的命令行窗口按 `Ctrl+C` - 或者关闭运行后端的窗口 ### 步骤 2:重新编译并启动后端 运行以下脚本: ```batch rebuild_backend_with_logs.bat ``` 这个脚本会: 1. 清理旧的编译文件 2. 重新编译所有代码 3. 启动后端服务并显示详细日志 ### 步骤 3:验证后端是否正常运行 在新的命令行窗口运行: ```batch test_amt_api.bat ``` 这个脚本会测试: 1. 后端是否运行 2. AMT API 是否可访问 3. 模拟模式状态 ### 步骤 4:查看日志输出 启动后端后,你应该能看到类似的日志: ``` 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [main] c.s.a.Application : Starting Application 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [main] c.s.a.Application : Started Application in x.xxx seconds ``` 当你点击"测试连接"时,应该看到: ``` 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 收到 AMT 测试连接请求,IP: 192.168.1.100, 模拟模式: false 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 使用真实 AMT 服务测试连接 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 开始测试 AMT 连接,IP: 192.168.1.100 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 使用手动输入的凭证,用户名: admin 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 准备发送 WS-Management 请求到: 192.168.1.100 ``` ### 步骤 5:如果仍然没有日志 #### 5.1 检查后端是否真的在运行 ```batch netstat -ano | findstr 8080 ``` 应该看到端口 8080 被占用。 #### 5.2 检查前端请求是否发送 打开浏览器开发者工具(F12),切换到 Network 标签,点击"测试连接",查看是否有请求发送到 `/device/amt/test`。 #### 5.3 检查请求 URL 确认前端请求的 URL 是: ``` POST http://localhost:8080/device/amt/test ``` #### 5.4 检查 CORS 问题 如果看到 CORS 错误,需要在后端添加 CORS 配置。 ### 步骤 6:使用模拟模式测试 如果真实 AMT 连接有问题,先用模拟模式测试功能: #### 方法 1:修改代码 编辑 `backend/src/main/java/com/soybean/admin/controller/DeviceController.java`: ```java // 将这一行 private boolean useMockMode = false; // 改为 private boolean useMockMode = true; ``` 然后重新编译并启动。 #### 方法 2:使用 API 切换 发送 POST 请求: ```batch curl -X POST http://localhost:8080/device/amt/toggleMock ``` 或者在浏览器中访问: ``` http://localhost:8080/device/amt/toggleMock ``` ### 步骤 7:测试模拟模式 启用模拟模式后: 1. IP 地址:任意(如 192.168.1.100) 2. 用户名:`admin` 3. 密码:`admin` 4. 点击"测试连接" 应该会成功并显示日志: ``` 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 收到 AMT 测试连接请求,IP: 192.168.1.100, 模拟模式: true 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 使用模拟模式测试连接 2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : AMT 测试连接结果: true ``` ## 常见问题 ### Q1: 编译失败 **错误**:`mvn clean compile` 失败 **解决**: 1. 检查 Java 版本:`java -version`(需要 Java 8 或更高) 2. 检查 Maven 版本:`mvn -version` 3. 查看错误信息,可能缺少依赖 ### Q2: 端口被占用 **错误**:`Port 8080 was already in use` **解决**: 1. 找到占用端口的进程: ```batch netstat -ano | findstr 8080 ``` 2. 结束进程: ```batch taskkill /PID <进程ID> /F ``` 3. 或者修改端口(在 `application.properties` 中) ### Q3: 前端请求超时 **错误**:前端显示 `timeout of 10000ms exceeded` **原因**: - 后端未运行 - 后端处理请求时间过长 - 网络问题 **解决**: 1. 确认后端正在运行 2. 查看后端日志是否有错误 3. 使用模拟模式测试 ### Q4: 看不到详细日志 **解决**: 1. 确认使用 `rebuild_backend_with_logs.bat` 启动 2. 或者在 `application.properties` 中添加: ```properties logging.level.com.soybean.admin=DEBUG ``` ## 验证清单 - [ ] 后端已停止旧的进程 - [ ] 运行了 `rebuild_backend_with_logs.bat` - [ ] 看到后端启动成功的日志 - [ ] 端口 8080 正常监听 - [ ] 运行了 `test_amt_api.bat` 验证 API - [ ] 前端可以访问 - [ ] 点击"测试连接"时后端有日志输出 ## 下一步 如果完成以上步骤后: 1. **有日志但连接失败**: - 查看 `AMT_TROUBLESHOOTING.md` - 使用 `quick_amt_test.bat` 诊断网络 2. **模拟模式正常**: - 说明代码和流程没问题 - 专注于解决真实 AMT 连接问题 3. **仍然没有日志**: - 检查防火墙设置 - 检查前端配置 - 查看浏览器控制台错误 ## 获取帮助 如果问题仍未解决: 1. 复制完整的错误信息 2. 复制后端日志 3. 复制浏览器控制台错误 4. 说明已尝试的步骤