NavisworksTransport/.agents/skills/project-tools/utils/LogManager.md

3.3 KiB
Raw Blame History

LogManager 使用指南

文件位置

src/Utils/LogManager.cs

用途

统一的日志记录管理器。在 Navisworks 插件环境中,Console.WriteLine 不可见,必须使用 LogManager。

日志级别

LogManager.Debug("调试信息");      // 开发调试使用
LogManager.Info("普通信息");       // 一般操作记录
LogManager.Warning("警告信息");    // 需要注意但非错误
LogManager.Error("错误信息");      // 错误(可选异常参数)
LogManager.Fatal("致命错误");      // 严重错误

核心方法

基本信息日志

LogManager.Info("路径创建成功");
LogManager.Info($"路径名称: {route.Name}, 长度: {route.TotalLength}");

带异常的错误日志

try
{
    // 某些操作
}
catch (Exception ex)
{
    // ✅ 正确:记录异常详情
    LogManager.Error($"操作失败: {ex.Message}", ex);
}

调试日志(开发时)

LogManager.Debug($"当前路径点数: {path.Points.Count}");
LogManager.Debug($"网格大小: {grid.Width} x {grid.Height}");

使用示例

示例1记录操作开始和完成

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记录重要状态变更

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

    // ❌ 错误在Navisworks中不可见
    Console.WriteLine("Error occurred");
    
    // ✅ 正确:写入日志文件
    LogManager.Error("Error occurred");
    
  2. 错误日志要包含异常

    // ❌ 不够详细
    LogManager.Error($"失败: {ex.Message}");
    
    // ✅ 包含堆栈信息
    LogManager.Error($"失败: {ex.Message}", ex);
    
  3. 避免在循环中大量记录

    // ❌ 可能导致日志文件过大
    foreach (var point in points)
    {
        LogManager.Debug($"处理点: {point.Name}");  // 1000个点=1000条日志
    }
    
    // ✅ 只记录摘要
    LogManager.Debug($"开始处理 {points.Count} 个点...");
    // ... 处理 ...
    LogManager.Debug($"点处理完成");
    
  4. 使用类别前缀便于过滤

    LogManager.Info("[路径规划] 开始生成");
    LogManager.Info("[碰撞检测] 发现3个碰撞");
    LogManager.Info("[渲染] 路径显示完成");