Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: logs now show up in mac console app #80

Merged
merged 4 commits into from
Dec 3, 2021
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 28 additions & 13 deletions Sources/Tracking/Util/Log.swift
Original file line number Diff line number Diff line change
@@ -1,34 +1,49 @@
import Foundation
import os.log
import OSLog

public protocol Logger {
func verbose(_ message: String)
/// mockable logger + abstract that allows you to log to multiple places if you wish
public protocol Logger: AutoMockable {
/// the noisey log level. Feel free to spam this log level with any
/// information about the SDK that would be useful for debugging the SDK.
func debug(_ message: String)
/// Not noisy log messages. Good for general information such as
/// when the background queue begins and ends running but use `debug`
/// for the status of each background queue task running.
func info(_ message: String)
func warning(_ message: String)
/// the SDK is in an unstable state that you want to notify
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided to cut the warn level?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. The original list of log levels (info, warning, verbose, etc) mostly came Android TBH.

The Swift Logger class does not include a warning case so I removed it.

/// the customer or our development team about.
func error(_ message: String)
}

// log messages to console.
// sourcery: InjectRegister = "Logger"
public class ConsoleLogger: Logger {
private let prefix = "[Cio]"
// allows filtering in Console mac app
private let logSubsystem = "io.customer.sdk"
private let logCategory = "CIO"

public func verbose(_ message: String) {
print("\(prefix) Verbose: \(message)")
// Unified logging for Swift. https://www.avanderlee.com/workflow/oslog-unified-logging/
// This means we can view logs in xcode console + Console app.
private func printMessage(_ message: String, _ level: OSLogType) {
if #available(iOS 14, *) {
let logger = os.Logger(subsystem: self.logSubsystem, category: self.logCategory)
logger.info("\(message, privacy: .public)")
} else {
let logger = OSLog(subsystem: logSubsystem, category: logCategory)
os_log("%{public}@", log: logger, type: .info, message)
}
}

public func debug(_ message: String) {
print("\(prefix) Debug: \(message)")
printMessage(message, .debug)
}

public func info(_ message: String) {
print("\(prefix) Info: \(message)")
}

public func warning(_ message: String) {
print("\(prefix) Warning: \(message)")
printMessage(message, .info)
}

public func error(_ message: String) {
print("\(prefix) Error: \(message)")
printMessage(message, .error)
}
}