Skip to content

Commit c1bc32c

Browse files
authored
Merge pull request swiftlang#28713 from ravikandhadai/oslog-logging-levels
2 parents bddb9e9 + d154f45 commit c1bc32c

File tree

2 files changed

+63
-14
lines changed

2 files changed

+63
-14
lines changed

stdlib/private/OSLog/OSLog.swift

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,21 @@ public struct Logger {
2121
@usableFromInline
2222
internal let logObject: OSLog
2323

24-
/// Create a custom OS log object.
24+
/// Create a custom OSLog object for logging.
2525
public init(subsystem: String, category: String) {
2626
logObject = OSLog(subsystem: subsystem, category: category)
2727
}
2828

29-
/// Return the default OS log object.
29+
/// Use the default OSLog object for logging.
3030
public init() {
3131
logObject = OSLog.default
3232
}
3333

34+
/// Create a Logger instance from an existing OSLog Object.
35+
public init(_ logObj: OSLog) {
36+
logObject = logObj
37+
}
38+
3439
// Functions defined below are marked @_optimize(none) to prevent inlining
3540
// of string internals (such as String._StringGuts) which will interfere with
3641
// constant evaluation and folding. Note that these functions will be inlined,
@@ -44,8 +49,57 @@ public struct Logger {
4449
osLog(log: logObject, level: level, message)
4550
}
4651

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+
}
49103
}
50104

51105
/// Given an instance of the custom string interpolation type: `OSLogMessage`,

test/stdlib/OSLogPrototypeExecTest.swift

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,18 @@ if #available(OSX 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) {
2626
h.log("A message with no data")
2727

2828
// Test logging at specific levels.
29-
h.log(level: .debug, "Minimum integer value: \(Int.min, format: .hex)")
30-
h.log(level: .info, "Maximum integer value: \(Int.max, format: .hex)")
29+
h.debug("Minimum integer value: \(Int.min, format: .hex)")
30+
h.info("Maximum integer value: \(Int.max, format: .hex)")
3131

3232
let privateID = 0x79abcdef
33-
h.log(
34-
level: .error,
35-
"Private Identifier: \(privateID, format: .hex, privacy: .private)")
33+
h.error("Private Identifier: \(privateID, format: .hex, privacy: .private)")
3634
let addr = 0x7afebabe
37-
h.log(
38-
level: .fault,
39-
"Invalid address: 0x\(addr, format: .hex, privacy: .public)")
35+
h.fault("Invalid address: 0x\(addr, format: .hex, privacy: .public)")
4036

4137
// Test logging with multiple arguments.
4238
let filePermissions = 0o777
4339
let pid = 122225
44-
h.log(
45-
level: .error,
40+
h.error(
4641
"""
4742
Access prevented: process \(pid) initiated by \
4843
user: \(privateID, privacy: .private) attempted resetting \

0 commit comments

Comments
 (0)