用 OSLog 来代替 swift 中的 print 【Ma

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

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

属性包装器(Property Wrapper)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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")
}
}

环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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,可以设置默认值,在需要区分的时候 再用参数区分

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%