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

145 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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("[渲染] 路径显示完成");
```