File tree 4 files changed +36
-4
lines changed
4 files changed +36
-4
lines changed Original file line number Diff line number Diff line change 7
7
8
8
import Foundation
9
9
10
- struct Log {
10
+ public struct Log {
11
11
/// Message to be logged.
12
- var message : String
12
+ public var message : String
13
13
14
14
/// How importante the log is.
15
- let level : LogLevel
15
+ public let level : LogLevel
16
16
17
17
/// The time when the message is logged.
18
18
let date : Date
Original file line number Diff line number Diff line change @@ -38,7 +38,7 @@ public class LogModifier: Equatable {
38
38
}
39
39
}
40
40
41
- // MARK: - Hi modifier
41
+ // MARK: - Default modifier
42
42
public class PepeModifier : LogModifier {
43
43
override func modify( _ log: inout Log ) {
44
44
log. message = " 🐸: \( log. message) "
Original file line number Diff line number Diff line change @@ -21,6 +21,10 @@ public struct PepeLogger {
21
21
/// How the log operation will be executed.
22
22
public var executionType : ExecutionType
23
23
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
+
24
28
/// Internal property to allow syncronous execution.
25
29
private let _lock = NSRecursiveLock ( )
26
30
@@ -55,6 +59,15 @@ public struct PepeLogger {
55
59
modifiers. reversed ( ) . forEach {
56
60
$0. modify ( & log)
57
61
}
62
+ observer? . willLog ( log: log)
58
63
writer. write ( message: log. message)
59
64
}
60
65
}
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
+ }
Original file line number Diff line number Diff line change @@ -32,4 +32,23 @@ final class PepeLoggerTests: XCTestCase {
32
32
let interval = end. timeIntervalSinceReferenceDate - start. timeIntervalSinceReferenceDate
33
33
XCTAssertTrue ( interval < reasonableTime)
34
34
}
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
+ }
35
54
}
You can’t perform that action at this time.
0 commit comments