# 日志系统使用说明

## 概述

我们创建了一个功能强大的日志系统，可以显示代码在文件的行号、类名和打印时间，完全替换了原来的 `print` 语句。

## 特性

- 🔍 **调试日志**: 用于详细的调试信息
- ℹ️ **信息日志**: 用于一般信息
- ⚠️ **警告日志**: 用于警告信息
- ❌ **错误日志**: 用于错误信息
- ✅ **成功日志**: 用于成功操作

## 使用方法

### 1. 基本日志函数

```swift
// 调试日志
logDebug("这是一条调试信息", className: "MyClass")

// 信息日志
logInfo("这是一条信息", className: "MyClass")

// 警告日志
logWarning("这是一条警告", className: "MyClass")

// 错误日志
logError("这是一条错误", className: "MyClass")

// 成功日志
logSuccess("操作成功", className: "MyClass")
```

### 2. 自动获取类名

```swift
class MyViewController: UIViewController {
    func someMethod() {
        // 使用 self.className 自动获取类名
        logInfo("方法被调用", className: self.className)
        
        // 或者使用静态方法
        logInfo("类被初始化", className: MyViewController.className)
    }
}
```

### 3. 日志输出格式

日志输出格式如下：
```
[时间戳] 图标 [类名] [文件名:行号] 函数名: 消息内容
```

例如：
```
[14:30:25.123] ℹ️ [ScannerView] [ScannerView.swift:162] onReceive: 检测到条码数量: 2
```

### 4. 日志级别控制

```swift
// 设置最小日志级别（只显示该级别及以上的日志）
Logger.shared.minimumLevel = .info  // 只显示 info、warning、error、success

// 启用/禁用日志
Logger.shared.isEnabled = false  // 完全禁用日志
```

## 已替换的 print 语句

### ScannerView.swift
- 条码检测相关日志
- 屏幕方向变化日志
- 自动选择定时器日志

### ScannerViewModel.swift
- 元数据输出日志
- 条码创建日志
- 数据更新日志

### CodePositionMarker
- 位置计算日志
- 坐标转换日志
- 边界检查日志

## 日志级别说明

1. **Debug (🔍)**: 最详细的调试信息，包括坐标、尺寸等
2. **Info (ℹ️)**: 一般信息，如状态变化、操作结果
3. **Warning (⚠️)**: 警告信息，如使用默认值、降级处理
4. **Error (❌)**: 错误信息，如权限失败、设备不支持
5. **Success (✅)**: 成功操作，如扫描完成、权限获取

## 性能考虑

- 日志系统使用 `@Published` 属性，支持 SwiftUI 的响应式更新
- 在 Release 版本中，可以通过设置 `isEnabled = false` 完全禁用日志
- 日志输出使用 `DispatchQueue.main.async` 确保在主线程执行

## 测试日志系统

在 ContentView 中点击"测试日志系统"按钮，可以看到所有级别的日志输出示例。

## 自定义扩展

如果需要添加新的日志级别或自定义格式，可以扩展 `LogLevel` 枚举和 `Logger` 类：

```swift
extension LogLevel {
    case custom = "🎯"
    
    var localizedName: String {
        switch self {
        case .custom: return "自定义"
        // ... 其他情况
        }
    }
}
```

## 注意事项

1. 所有日志函数都支持自动获取文件名、行号和函数名
2. 类名参数是可选的，如果不提供会显示 "Unknown"
3. 日志系统是线程安全的，可以在任何线程中调用
4. 在开发阶段建议保持日志启用，生产环境可以适当调整级别 