Skip to content

Commit ff530e8

Browse files
authored
Add observer (#8)
1 parent cf57223 commit ff530e8

File tree

4 files changed

+36
-4
lines changed

4 files changed

+36
-4
lines changed

Sources/Pepe/Log.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import Foundation
99

10-
struct Log {
10+
public struct Log {
1111
/// Message to be logged.
12-
var message: String
12+
public var message: String
1313

1414
/// How importante the log is.
15-
let level: LogLevel
15+
public let level: LogLevel
1616

1717
/// The time when the message is logged.
1818
let date: Date

Sources/Pepe/LogModifier.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class LogModifier: Equatable {
3838
}
3939
}
4040

41-
// MARK: - Hi modifier
41+
// MARK: - Default modifier
4242
public class PepeModifier: LogModifier {
4343
override func modify(_ log: inout Log) {
4444
log.message = "🐸: \(log.message)"

Sources/Pepe/PepeLogger.swift

+13
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ public struct PepeLogger {
2121
/// How the log operation will be executed.
2222
public var executionType: ExecutionType
2323

24+
/// It allows you to observe the logger. Note that the `executionType` is attatched not only to the
25+
/// logging itself but also to this observer.
26+
public var observer: LoggerObserver?
27+
2428
/// Internal property to allow syncronous execution.
2529
private let _lock = NSRecursiveLock()
2630

@@ -55,6 +59,15 @@ public struct PepeLogger {
5559
modifiers.reversed().forEach {
5660
$0.modify(&log)
5761
}
62+
observer?.willLog(log: log)
5863
writer.write(message: log.message)
5964
}
6065
}
66+
67+
68+
/// This protocol allows you to observe the logger.
69+
public protocol LoggerObserver {
70+
/// It notifies the observer that a message is about to be logged.
71+
/// - Parameter log: Object that contains the log itself.
72+
func willLog(log: Log)
73+
}

Tests/PepeTests/PepeLoggerTests.swift

+19
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,23 @@ final class PepeLoggerTests: XCTestCase {
3232
let interval = end.timeIntervalSinceReferenceDate - start.timeIntervalSinceReferenceDate
3333
XCTAssertTrue(interval < reasonableTime)
3434
}
35+
36+
func testLogging_withObserver_logCountShouldBeEqualToExpected() {
37+
var logger = Pepe.loggerPlease()
38+
let mockObserver = MockObserver()
39+
logger.observer = mockObserver
40+
logger.log("Hello")
41+
logger.log("World!")
42+
XCTAssertEqual(mockObserver.logCount, 2)
43+
}
44+
}
45+
46+
47+
// MARK: Helpers
48+
internal class MockObserver: LoggerObserver {
49+
var logCount = 0
50+
51+
func willLog(log: Log) {
52+
logCount += 1
53+
}
3554
}

0 commit comments

Comments
 (0)