You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
3.4 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 日志系统使用说明
## 概述
我们创建了一个功能强大的日志系统,可以显示代码在文件的行号、类名和打印时间,完全替换了原来的 `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. 在开发阶段建议保持日志启用,生产环境可以适当调整级别