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

Improve logging by displaying more relevant details and additional arguments #83

Merged
merged 1 commit into from
Jun 30, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
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
11 changes: 3 additions & 8 deletions Source/Logging.swift
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
import Foundation

/// Simple function to help in debugging, a noop in Release builds
func debugLog(_ item: Any, _ method: String = #function) {
func debugLog(_ text: String, _ arguments: [String: Any] = [:]) {
#if DEBUG
let timestamp = Date()

if let message = item as? String {
print("\(timestamp) - \(message)")
} else {
// Support passing object directly instead of string to print class and function
let component = String(describing: type(of: item))
print("\(timestamp) - [\(component)] \(method)")
}
print("\(timestamp) \(text) \(arguments)")

#endif
}

Expand Down
9 changes: 8 additions & 1 deletion Source/Session/Session.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ public class Session: NSObject {
let visit = makeVisit(for: visitable, options: options ?? VisitOptions())
currentVisit?.cancel()
currentVisit = visit

log("visit", ["location": visit.location, "options": visit.options, "reload": reload])

visit.delegate = self
visit.start()
Expand Down Expand Up @@ -296,11 +298,12 @@ extension Session: WKNavigationDelegate {
}

public func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
debugLog("[Session] webViewWebContentProcessDidTerminate")
log("webViewWebContentProcessDidTerminate")
delegate?.sessionWebViewProcessDidTerminate(self)
}

private func openExternalURL(_ url: URL) {
log("openExternalURL", ["url": url])
delegate?.session(self, openExternalURL: url)
}

Expand Down Expand Up @@ -334,3 +337,7 @@ extension Session: WKNavigationDelegate {
}
}
}

private func log(_ name: String, _ arguments: [String: Any] = [:]) {
debugLog("[Session] \(name)", arguments)
}
12 changes: 11 additions & 1 deletion Source/Visit/ColdBootVisit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ final class ColdBootVisit: Visit {
private(set) var navigation: WKNavigation?

override func startVisit() {
debugLog(self)
log("startVisit")

webView.navigationDelegate = self
bridge.pageLoadDelegate = self
Expand All @@ -23,17 +23,23 @@ final class ColdBootVisit: Visit {
}

override func cancelVisit() {
log("cancelVisit")

removeNavigationDelegate()
webView.stopLoading()
finishRequest()
}

override func completeVisit() {
log("completeVisit")

removeNavigationDelegate()
delegate?.visitDidInitializeWebView(self)
}

override func failVisit() {
log("failVisit")

removeNavigationDelegate()
finishRequest()
}
Expand All @@ -42,6 +48,10 @@ final class ColdBootVisit: Visit {
guard webView.navigationDelegate === self else { return }
webView.navigationDelegate = nil
}

private func log(_ name: String) {
debugLog("[ColdBootVisit] \(name) \(location.absoluteString)")
}
}

extension ColdBootVisit: WKNavigationDelegate {
Expand Down
23 changes: 14 additions & 9 deletions Source/Visit/JavaScriptVisit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,26 @@ final class JavaScriptVisit: Visit {
}

override func startVisit() {
debugLog(self)
log("startVisit")
bridge.visitDelegate = self
bridge.visitLocation(location, options: options, restorationIdentifier: restorationIdentifier)
}

override func cancelVisit() {
debugLog(self)
log("cancelVisit")
bridge.cancelVisit(withIdentifier: identifier)
finishRequest()
}

override func failVisit() {
debugLog(self)
log("failVisit")
finishRequest()
}
}

extension JavaScriptVisit: WebViewVisitDelegate {
func webView(_ webView: WebViewBridge, didStartVisitWithIdentifier identifier: String, hasCachedSnapshot: Bool) {
debugLog(self)
log("didStartVisitWithIdentifier", ["identifier": identifier, "hasCachedSnapshot": hasCachedSnapshot])
self.identifier = identifier
self.hasCachedSnapshot = hasCachedSnapshot

Expand All @@ -44,13 +44,13 @@ extension JavaScriptVisit: WebViewVisitDelegate {

func webView(_ webView: WebViewBridge, didStartRequestForVisitWithIdentifier identifier: String, date: Date) {
guard identifier == self.identifier else { return }
debugLog(self)
log("didFinishRequestForVisitWithIdentifier", ["identifier": identifier, "date": date])
startRequest()
}

func webView(_ webView: WebViewBridge, didCompleteRequestForVisitWithIdentifier identifier: String) {
guard identifier == self.identifier else { return }
debugLog(self)
log("didCompleteRequestForVisitWithIdentifier", ["identifier": identifier])

if hasCachedSnapshot {
delegate?.visitWillLoadResponse(self)
Expand All @@ -60,28 +60,33 @@ extension JavaScriptVisit: WebViewVisitDelegate {
func webView(_ webView: WebViewBridge, didFailRequestForVisitWithIdentifier identifier: String, statusCode: Int) {
guard identifier == self.identifier else { return }

log("didFailRequestForVisitWithIdentifier", ["identifier": identifier, "statusCode": statusCode])
fail(with: TurboError(statusCode: statusCode))
}

func webView(_ webView: WebViewBridge, didFinishRequestForVisitWithIdentifier identifier: String, date: Date) {
guard identifier == self.identifier else { return }

debugLog(self)
log("didFinishRequestForVisitWithIdentifier", ["identifier": identifier, "date": date])
finishRequest()
}

func webView(_ webView: WebViewBridge, didRenderForVisitWithIdentifier identifier: String) {
guard identifier == self.identifier else { return }

debugLog(self)
log("didRenderForVisitWithIdentifier", ["identifier": identifier])
delegate?.visitDidRender(self)
}

func webView(_ webView: WebViewBridge, didCompleteVisitWithIdentifier identifier: String, restorationIdentifier: String) {
guard identifier == self.identifier else { return }

debugLog(self)
log("didCompleteVisitWithIdentifier", ["identifier": identifier, "restorationIdentifier": restorationIdentifier])
self.restorationIdentifier = restorationIdentifier
complete()
}

private func log(_ name: String, _ arguments: [String: Any] = [:]) {
debugLog("[JavascriptVisit] \(name) \(location.absoluteString)", arguments)
}
}
4 changes: 2 additions & 2 deletions Source/WebView/WebViewBridge.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ final class WebViewBridge {
return
}

debugLog("[Bridge] → \(function)")
debugLog("[Bridge] → \(function) \(arguments)")

webView.evaluateJavaScript(script) { result, error in
debugLog("[Bridge] = \(function) evaluation complete")
Expand All @@ -103,7 +103,7 @@ extension WebViewBridge: ScriptMessageHandlerDelegate {
guard let message = ScriptMessage(message: scriptMessage) else { return }

if message.name != .log {
debugLog("[Bridge] ← \(message.name)")
debugLog("[Bridge] ← \(message.name) \(message.data)")
}

switch message.name {
Expand Down