用 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,可以设置默认值,在需要区分的时候 再用参数区分

相关推荐
万物得其道者成1 小时前
Mac+MuMu 模拟器 + Charles 抓包配置全流程
macos
刘某某.2 小时前
在 mac 和 linux 系统上使用 pyenv
linux·运维·macos
Dola_Zou3 小时前
如何用一套加密狗方案打通 Windows、Linux 与 macOS等,零成本实现跨平台交付?
linux·安全·macos·自动化·软件工程·软件加密
weixin_462446234 小时前
macOS(M4 / Apple Silicon)手动安装 tree(不用 brew / ports)
macos·tree
sg_knight5 小时前
Claude Code 安装指南(Windows / macOS)
windows·macos·llm·ai编程·claude·code·claude-code
m0_647057965 小时前
PyCharm 2023.2.5 Conda Interpreter 解析失败问题排查与解决(macOS)
macos·pycharm·conda
青芒.5 小时前
macOS Java 多版本环境配置完全指南
java·开发语言·macos
TheNextByte15 小时前
如何使用 7 种解决方案将照片从Mac传输到三星
macos
Thomas_YXQ18 小时前
Unity3D在ios平台下内存的优化详解
开发语言·macos·ios·性能优化·cocoa
FAFU_kyp21 小时前
RISC0_ZERO项目在macOs上生成链上证明避坑
开发语言·后端·学习·macos·rust