# LogManager 使用指南 ## 文件位置 `src/Utils/LogManager.cs` ## 用途 统一的日志记录管理器。在 Navisworks 插件环境中,`Console.WriteLine` 不可见,必须使用 LogManager。 ## 日志级别 ```csharp LogManager.Debug("调试信息"); // 开发调试使用 LogManager.Info("普通信息"); // 一般操作记录 LogManager.Warning("警告信息"); // 需要注意但非错误 LogManager.Error("错误信息"); // 错误(可选异常参数) LogManager.Fatal("致命错误"); // 严重错误 ``` ## 核心方法 ### 基本信息日志 ```csharp LogManager.Info("路径创建成功"); LogManager.Info($"路径名称: {route.Name}, 长度: {route.TotalLength}"); ``` ### 带异常的错误日志 ```csharp try { // 某些操作 } catch (Exception ex) { // ✅ 正确:记录异常详情 LogManager.Error($"操作失败: {ex.Message}", ex); } ``` ### 调试日志(开发时) ```csharp LogManager.Debug($"当前路径点数: {path.Points.Count}"); LogManager.Debug($"网格大小: {grid.Width} x {grid.Height}"); ``` ## 使用示例 ### 示例1:记录操作开始和完成 ```csharp public void CreatePath() { LogManager.Info("=== 开始创建路径 ==="); try { // 执行操作 var route = GeneratePath(); LogManager.Info($"路径创建成功: {route.Name}, ID: {route.Id}"); } catch (Exception ex) { LogManager.Error($"路径创建失败: {ex.Message}", ex); throw; // 重新抛出或处理 } LogManager.Info("=== 创建路径完成 ==="); } ``` ### 示例2:记录重要状态变更 ```csharp public void SetStartPoint(Point3D point) { _startPoint = point; LogManager.Info($"起点已设置: ({point.X:F2}, {point.Y:F2}, {point.Z:F2})"); if (_endPoint != null) { double distance = GeometryHelper.Distance(point, _endPoint); LogManager.Info($"起点终点距离: {distance:F2} 米"); } } ``` ## 日志文件位置 日志文件存储在: ``` C:\ProgramData\Autodesk\Navisworks Manage 2026\plugins\TransportPlugin\logs\ ``` 文件命名: - `debug.log` - 当前日志 - `debug.log.1`, `debug.log.2` - 历史日志(自动轮转) ## 注意事项 1. **永远不要使用 Console.WriteLine**: ```csharp // ❌ 错误:在Navisworks中不可见 Console.WriteLine("Error occurred"); // ✅ 正确:写入日志文件 LogManager.Error("Error occurred"); ``` 2. **错误日志要包含异常**: ```csharp // ❌ 不够详细 LogManager.Error($"失败: {ex.Message}"); // ✅ 包含堆栈信息 LogManager.Error($"失败: {ex.Message}", ex); ``` 3. **避免在循环中大量记录**: ```csharp // ❌ 可能导致日志文件过大 foreach (var point in points) { LogManager.Debug($"处理点: {point.Name}"); // 1000个点=1000条日志 } // ✅ 只记录摘要 LogManager.Debug($"开始处理 {points.Count} 个点..."); // ... 处理 ... LogManager.Debug($"点处理完成"); ``` 4. **使用类别前缀便于过滤**: ```csharp LogManager.Info("[路径规划] 开始生成"); LogManager.Info("[碰撞检测] 发现3个碰撞"); LogManager.Info("[渲染] 路径显示完成"); ```