用 OSLog 来代替 swift 中的 print [MacOS App]

OSLog 是苹果在 macOS 10.15(Catalina)和 iOS 15 引入的一个用于记录系统日志的新框架。它提供了一种现代化的方式来记录应用程序的日志,并且与系统日志服务集成得非常好。

在SwiftUI 应用中使用有2种常见的模式:

属性包装器(Property Wrapper)

swift 复制代码
import os.log

@propertyWrapper
struct AppLog {
    private let logger: Logger
    
    init(subsystem: String = "com.example.MyApp", category: String = "defaultCategory") {
        self.logger = Logger(subsystem: subsystem, category: category)
    }
    
    var wrappedValue: Logger {
        return logger
    }
}


struct MyViewModel {
    @AppLog(subsystem: "com.example.MyApp", category: "MyCategory")
    private var logger
    
    func doSomething() {
        // 记录日志消息
        logger.log("This is a log message")
    }
}

环境变量

swift 复制代码
//  applogger.swift
import Foundation
import SwiftUI
import os.log


private struct LoggerEnvironmentKey: EnvironmentKey {
    static let defaultValue: Logger = Logger(subsystem: subsystem, category: "main")
}

extension EnvironmentValues {
    var logger : Logger {
        get { self[LoggerEnvironmentKey.self] }
        set { self[LoggerEnvironmentKey.self] = newValue }
    }
}

// App.swift
 Settings {
            SettingsView()
        }
        .environment(\.logger, logger)


// someView.swift

import SwiftUI
import os.log
struct ContentView: View {
    @Environment(\.logger) private var logger: Logger // 访问共享日志器

    var body: some View {
        Text("Hello, World!")
            .onAppear {
                logger.info("ContentView appeared")
            }
    }
}

总结

两种方法都很方便,但是推荐第一种,第一种可以不用每次引入 OSLog,可以设置默认值,在需要区分的时候 再用参数区分

相关推荐
飞雪20073 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
麦兜*4 小时前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
degree52012 小时前
全平台轻量浏览器推荐|支持Win/macOS/Linux,极速加载+隐私保护+扩展插件,告别广告与数据追踪!
windows·macos·电脑
冯浩(grow up)20 小时前
macos 安装nodepad++ (教程+安装包+报错后的解决方法)
macos
2501_928094652 天前
Ps 2025 图像编辑 Photoshop(Mac中文)
图像处理·macos·photoshop·ps
大熊猫侯佩2 天前
「内力探查术」:用 Instruments 勘破 SwiftUI 卡顿迷局
swiftui·debug·xcode
Magnetic_h2 天前
【iOS】锁的原理
笔记·学习·macos·ios·objective-c·cocoa·xcode
HarderCoder2 天前
深入理解 SwiftUI 的 ViewBuilder:从隐式语法到自定义容器
swiftui·swift
东坡肘子2 天前
我差点失去了巴顿(我的狗狗) | 肘子的 Swift 周报 #098
swiftui·swift·apple
Cosmoshhhyyy2 天前
mac环境下安装git并配置密钥等
git·macos