@@ -21,16 +21,21 @@ public struct Logger {
21
21
@usableFromInline
22
22
internal let logObject : OSLog
23
23
24
- /// Create a custom OS log object.
24
+ /// Create a custom OSLog object for logging .
25
25
public init ( subsystem: String , category: String ) {
26
26
logObject = OSLog ( subsystem: subsystem, category: category)
27
27
}
28
28
29
- /// Return the default OS log object.
29
+ /// Use the default OSLog object for logging .
30
30
public init ( ) {
31
31
logObject = OSLog . default
32
32
}
33
33
34
+ /// Create a Logger instance from an existing OSLog Object.
35
+ public init ( _ logObj: OSLog ) {
36
+ logObject = logObj
37
+ }
38
+
34
39
// Functions defined below are marked @_optimize(none) to prevent inlining
35
40
// of string internals (such as String._StringGuts) which will interfere with
36
41
// constant evaluation and folding. Note that these functions will be inlined,
@@ -44,8 +49,57 @@ public struct Logger {
44
49
osLog ( log: logObject, level: level, message)
45
50
}
46
51
47
- // TODO: define overloads for logging at specific levels: debug, info, notice,
48
- // error, fault based on the Swift forum "logging-levels" discussion.
52
+ // The following overloads are for logging at specific levels. The levels that
53
+ // are supported are debug (also called trace), info, notice (also called
54
+ // default), error (also called warning), fault (also called critical).
55
+
56
+ @_transparent
57
+ @_optimize ( none)
58
+ public func trace( _ message: OSLogMessage ) {
59
+ osLog ( log: logObject, level: . debug, message)
60
+ }
61
+
62
+ @_transparent
63
+ @_optimize ( none)
64
+ public func debug( _ message: OSLogMessage ) {
65
+ osLog ( log: logObject, level: . debug, message)
66
+ }
67
+
68
+ @_transparent
69
+ @_optimize ( none)
70
+ public func info( _ message: OSLogMessage ) {
71
+ osLog ( log: logObject, level: . info, message)
72
+ }
73
+
74
+ @_transparent
75
+ @_optimize ( none)
76
+ public func notice( _ message: OSLogMessage ) {
77
+ osLog ( log: logObject, level: . default, message)
78
+ }
79
+
80
+ @_transparent
81
+ @_optimize ( none)
82
+ public func warning( _ message: OSLogMessage ) {
83
+ osLog ( log: logObject, level: . error, message)
84
+ }
85
+
86
+ @_transparent
87
+ @_optimize ( none)
88
+ public func error( _ message: OSLogMessage ) {
89
+ osLog ( log: logObject, level: . error, message)
90
+ }
91
+
92
+ @_transparent
93
+ @_optimize ( none)
94
+ public func critical( _ message: OSLogMessage ) {
95
+ osLog ( log: logObject, level: . fault, message)
96
+ }
97
+
98
+ @_transparent
99
+ @_optimize ( none)
100
+ public func fault( _ message: OSLogMessage ) {
101
+ osLog ( log: logObject, level: . fault, message)
102
+ }
49
103
}
50
104
51
105
/// Given an instance of the custom string interpolation type: `OSLogMessage`,
0 commit comments