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.
3.4 KiB
3.4 KiB
日志系统使用说明
概述
我们创建了一个功能强大的日志系统,可以显示代码在文件的行号、类名和打印时间,完全替换了原来的 print
语句。
特性
- 🔍 调试日志: 用于详细的调试信息
- ℹ️ 信息日志: 用于一般信息
- ⚠️ 警告日志: 用于警告信息
- ❌ 错误日志: 用于错误信息
- ✅ 成功日志: 用于成功操作
使用方法
1. 基本日志函数
// 调试日志
logDebug("这是一条调试信息", className: "MyClass")
// 信息日志
logInfo("这是一条信息", className: "MyClass")
// 警告日志
logWarning("这是一条警告", className: "MyClass")
// 错误日志
logError("这是一条错误", className: "MyClass")
// 成功日志
logSuccess("操作成功", className: "MyClass")
2. 自动获取类名
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. 日志级别控制
// 设置最小日志级别(只显示该级别及以上的日志)
Logger.shared.minimumLevel = .info // 只显示 info、warning、error、success
// 启用/禁用日志
Logger.shared.isEnabled = false // 完全禁用日志
已替换的 print 语句
ScannerView.swift
- 条码检测相关日志
- 屏幕方向变化日志
- 自动选择定时器日志
ScannerViewModel.swift
- 元数据输出日志
- 条码创建日志
- 数据更新日志
CodePositionMarker
- 位置计算日志
- 坐标转换日志
- 边界检查日志
日志级别说明
- Debug (🔍): 最详细的调试信息,包括坐标、尺寸等
- Info (ℹ️): 一般信息,如状态变化、操作结果
- Warning (⚠️): 警告信息,如使用默认值、降级处理
- Error (❌): 错误信息,如权限失败、设备不支持
- Success (✅): 成功操作,如扫描完成、权限获取
性能考虑
- 日志系统使用
@Published
属性,支持 SwiftUI 的响应式更新 - 在 Release 版本中,可以通过设置
isEnabled = false
完全禁用日志 - 日志输出使用
DispatchQueue.main.async
确保在主线程执行
测试日志系统
在 ContentView 中点击"测试日志系统"按钮,可以看到所有级别的日志输出示例。
自定义扩展
如果需要添加新的日志级别或自定义格式,可以扩展 LogLevel
枚举和 Logger
类:
extension LogLevel {
case custom = "🎯"
var localizedName: String {
switch self {
case .custom: return "自定义"
// ... 其他情况
}
}
}
注意事项
- 所有日志函数都支持自动获取文件名、行号和函数名
- 类名参数是可选的,如果不提供会显示 "Unknown"
- 日志系统是线程安全的,可以在任何线程中调用
- 在开发阶段建议保持日志启用,生产环境可以适当调整级别