diff --git a/App/ViewController.swift b/App/ViewController.swift index 3baebf31..2fee59a1 100644 --- a/App/ViewController.swift +++ b/App/ViewController.swift @@ -22,9 +22,11 @@ import UIKit import Lock -import OSLog +import os class ViewController: UIViewController { + private let logger = os.Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.auth0.lock", category: "ViewController") + override func loadView() { let view = UIView() view.backgroundColor = .white @@ -183,21 +185,20 @@ class ViewController: UIViewController { } private func showLock(lock: Lock) { -// Log.enable(minimumSeverity: LogSeverity.verbose, debugMode: true) -// lock -// .onAuth { Log.info?.message("Obtained credentials \($0)") } -// .onError { Log.error?.message("Failed with \($0)") } -// .onSignUp { email, _ in Log.debug?.message("New user \(email)") } -// .onCancel { Log.debug?.message("User closed lock") } -// .onPasswordless { Log.debug?.message("Passwordless requested for \($0)") } -// .present(from: self) + lock + .onAuth { [logger] in logger.info("Obtained credentials \($0)") } + .onError { [logger] in logger.error("Failed with \($0)") } + .onSignUp { [logger] email, _ in logger.debug("New user \(email)") } + .onCancel { [logger] in logger.debug("User closed lock") } + .onPasswordless { [logger] in logger.debug("Passwordless requested for \($0)") } + .present(from: self) } } func applyDefaultOptions(_ options: inout OptionBuildable) { options.closable = true options.logLevel = .all - options.loggerOutput = CleanroomLockLogger() + options.loggerOutput = OSLockLogger() options.logHttpRequest = true options.oidcConformant = true @@ -266,24 +267,25 @@ func applyPhantomStyle(_ style: inout Style) { style.ruleTextColor = darkPurple } -class CleanroomLockLogger: LoggerOutput { +class OSLockLogger: LoggerOutput { + + private let logger = os.Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.auth0.lock", category: "Lock") func message(_ message: String, level: LoggerLevel, filename: String, line: Int) { -// let channel: LogChannel? -// switch level { -// case .debug: -// channel = Log.debug -// case .error: -// channel = Log.error -// case .info: -// channel = Log.info -// case .verbose: -// channel = Log.verbose -// case .warn: -// channel = Log.warning -// default: -// channel = nil -// } -// channel?.message(message, filePath: filename, fileLine: line) + let osLevel: OSLogType + switch level { + case .error: + osLevel = .error + case .warn: + osLevel = .default + case .info: + osLevel = .info + case .debug, .verbose: + osLevel = .debug + default: + osLevel = .default + } + let filename = URL(fileURLWithPath: filename).lastPathComponent + logger.log(level: osLevel, "\(filename):\(line) - \(message)") } } diff --git a/EXAMPLES.md b/EXAMPLES.md index 1fd2cbfd..a0bbd172 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -284,32 +284,35 @@ Database connection will display the Terms of Service dialog. Defaults to `true` .withOptions { $0.logLevel = .all $0.logHttpRequest = true - $0.loggerOutput = CleanroomLockLogger() + $0.loggerOutput = OSLockLogger() } ``` -In the code above, the *loggerOutput* has been set to use [CleanroomLogger](https://github.com/emaloney/CleanroomLogger). -This can typically be achieved by implementing the *loggerOutput* protocol. You can of course use your favorite logger library. +In the code above, the *loggerOutput* has been set to use Apple's native [unified logging system](https://developer.apple.com/documentation/os/logger) (`os.Logger`). +This can typically be achieved by implementing the *loggerOutput* protocol. You can of course use your favorite logger library. ```swift -class CleanroomLockLogger: LoggerOutput { +import os + +class OSLockLogger: LoggerOutput { + private let logger = os.Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.auth0.lock", category: "Lock") + func message(_ message: String, level: LoggerLevel, filename: String, line: Int) { - let channel: LogChannel? + let osLevel: OSLogType switch level { - case .debug: - channel = Log.debug case .error: - channel = Log.error - case .info: - channel = Log.info - case .verbose: - channel = Log.verbose + osLevel = .error case .warn: - channel = Log.warning + osLevel = .default + case .info: + osLevel = .info + case .debug, .verbose: + osLevel = .debug default: - channel = nil + osLevel = .default } - channel?.message(message, filePath: filename, fileLine: line) + let filename = URL(fileURLWithPath: filename).lastPathComponent + logger.log(level: osLevel, "\(filename):\(line) - \(message)") } } ``` diff --git a/Lock.xcodeproj/project.pbxproj b/Lock.xcodeproj/project.pbxproj index 3d90c221..928dd74a 100644 --- a/Lock.xcodeproj/project.pbxproj +++ b/Lock.xcodeproj/project.pbxproj @@ -319,7 +319,6 @@ 5C53A7F82703F48100A7C0A3 /* Nimble.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Nimble.xcframework; path = Carthage/Build/Nimble.xcframework; sourceTree = ""; }; 5C53A7F92703F48100A7C0A3 /* OHHTTPStubs.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = OHHTTPStubs.xcframework; path = Carthage/Build/OHHTTPStubs.xcframework; sourceTree = ""; }; 5C53A8002703F4AB00A7C0A3 /* SimpleKeychain.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = SimpleKeychain.xcframework; path = Carthage/Build/SimpleKeychain.xcframework; sourceTree = ""; }; - 5C53A8012703F4AB00A7C0A3 /* CleanroomLogger.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = CleanroomLogger.xcframework; path = Carthage/Build/CleanroomLogger.xcframework; sourceTree = ""; }; 5C53A8022703F4AB00A7C0A3 /* JWTDecode.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = JWTDecode.xcframework; path = Carthage/Build/JWTDecode.xcframework; sourceTree = ""; }; 5C53A8062703F4B900A7C0A3 /* Auth0.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Auth0.xcframework; path = Carthage/Build/Auth0.xcframework; sourceTree = ""; }; 5F0FCF8F1E20117E00E3D53B /* ObserverStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverStore.swift; sourceTree = ""; }; @@ -861,7 +860,6 @@ isa = PBXGroup; children = ( 5C53A8062703F4B900A7C0A3 /* Auth0.xcframework */, - 5C53A8012703F4AB00A7C0A3 /* CleanroomLogger.xcframework */, 5C53A8022703F4AB00A7C0A3 /* JWTDecode.xcframework */, 5C53A8002703F4AB00A7C0A3 /* SimpleKeychain.xcframework */, 5C53A7F82703F48100A7C0A3 /* Nimble.xcframework */,