有2种方法,属性包装器 和 环境变量,但是推荐第一种,第一种可以不用每次引入 OSLog,可以设置默认值,在需要区分的时候 再用参数区分 ## 属性包装器(Property Wrapper) 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") } } ## 环境变量 // 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") } } }