From b4bcf50f52d39ed38555f2260d8e6e72d97e19ae Mon Sep 17 00:00:00 2001 From: Stefan Wieland Date: Fri, 9 Dec 2022 09:40:16 +0100 Subject: [PATCH 1/2] add callback with detailed loginformations such as filename, line, level, ... --- Logbook/Source/Sink/ClosureLogSink.swift | 13 ++++++-- LogbookTests/ClosureLogTests.swift | 42 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/Logbook/Source/Sink/ClosureLogSink.swift b/Logbook/Source/Sink/ClosureLogSink.swift index 59bb20f..b002b31 100644 --- a/Logbook/Source/Sink/ClosureLogSink.swift +++ b/Logbook/Source/Sink/ClosureLogSink.swift @@ -19,9 +19,14 @@ public class ClosureLogSink: LogSink { public var format: String = LogPlaceholder.defaultLogFormat public var dateFormatter: DateFormatter - private let callback: (String) -> Void + private let callback: ((String) -> Void)? + private let detailedCallback: ((LogMessage) -> Void)? - public init(identifier: String = UUID().uuidString, level: LevelMode, categories: LogCategoryFilter = .all, callback: @escaping (String) -> Void) { + public init(identifier: String = UUID().uuidString, + level: LevelMode, + categories: LogCategoryFilter = .all, + callback: ((String) -> Void)? = nil, + detailedCallback: ((LogMessage) -> Void)? = nil) { self.identifier = identifier self.level = level self.categories = categories @@ -29,6 +34,7 @@ public class ClosureLogSink: LogSink { self.dateFormatter.dateStyle = .short self.dateFormatter.timeStyle = .medium self.callback = callback + self.detailedCallback = detailedCallback } public func send(_ message: LogMessage) { @@ -44,7 +50,8 @@ public class ClosureLogSink: LogSink { formattedMessage = formattedMessage.replacingOccurrences(of: LogPlaceholder.line, with: "\(message.header.line)") formattedMessage = formattedMessage.replacingOccurrences(of: LogPlaceholder.messages, with: messages) - callback(formattedMessage) + callback?(formattedMessage) + detailedCallback?(message) } } diff --git a/LogbookTests/ClosureLogTests.swift b/LogbookTests/ClosureLogTests.swift index 68d9a17..f4a0a4a 100644 --- a/LogbookTests/ClosureLogTests.swift +++ b/LogbookTests/ClosureLogTests.swift @@ -171,4 +171,46 @@ class ClosureLogTests: XCTestCase { XCTAssertEqual(logMessage, "TestError.missingData") } } + + func testDetailedClosureSink() { + let testMessage = "Test Message" + + var category: String = "" + var level: LogLevel = .error + var message: String = "" + + var file: String = "" + var function: String = "" + var line: UInt = 0 + + let expectation = expectation(description: "expectation") + + let sink = ClosureLogSink(level: .min(.debug), detailedCallback: { log in + category = log.category.identifier + level = log.level + message = log.messages.first ?? "" + + file = log.header.file + function = log.header.function + line = log.header.line + + expectation.fulfill() + }) + + let logFormat = "\(LogPlaceholder.messages)" + sink.format = logFormat + logbook.add(sink: sink) + + logbook.debug(testMessage, category: .networking) + + waitForExpectations(timeout: 3) { (error) in + XCTAssertEqual(category, LogCategory.networking.identifier) + XCTAssertEqual(level, LogLevel.debug) + XCTAssertEqual(message, testMessage) + + XCTAssertTrue(file.contains("ClosureLogTests.swift")) + XCTAssertEqual(function, "testDetailedClosureSink()") + XCTAssertNotEqual(line, 0) + } + } } From c88145a493019bcd30b3864f28f188349c52c087 Mon Sep 17 00:00:00 2001 From: Stefan Wieland Date: Fri, 9 Dec 2022 09:57:29 +0100 Subject: [PATCH 2/2] get rid of error in tests --- LogbookTests/ClosureLogTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LogbookTests/ClosureLogTests.swift b/LogbookTests/ClosureLogTests.swift index f4a0a4a..af64564 100644 --- a/LogbookTests/ClosureLogTests.swift +++ b/LogbookTests/ClosureLogTests.swift @@ -203,7 +203,7 @@ class ClosureLogTests: XCTestCase { logbook.debug(testMessage, category: .networking) - waitForExpectations(timeout: 3) { (error) in + waitForExpectations(timeout: 3) { _ in XCTAssertEqual(category, LogCategory.networking.identifier) XCTAssertEqual(level, LogLevel.debug) XCTAssertEqual(message, testMessage)