@@ -12,48 +12,49 @@ import os
12
12
public struct PepeLogger {
13
13
/// A set of modifiers to be apllied to every log message.
14
14
/// Notice that, is you set an empty array, the logged string will be the one that you provide.
15
- var modifiers : [ LogModifier ]
15
+ public var modifiers : [ LogModifier ]
16
16
17
17
/// Indicates how the message will be logged or "written". By default, the messages will be logged
18
18
/// on the console.
19
- var writer : Writer
19
+ public var writer : Writer
20
+
21
+ /// How the log operation will be executed.
22
+ public var executionType : ExecutionType
23
+
24
+ /// Internal property to allow syncronous execution.
25
+ private let _lock = NSRecursiveLock ( )
26
+
27
+ public enum ExecutionType : Equatable {
28
+ case async ( DispatchQueue ) , sync
29
+ }
20
30
21
31
init ( ) {
22
32
modifiers = [ . pepe]
23
33
writer = . console
34
+ executionType = . sync
24
35
}
25
36
26
37
/// Logs a message using the previously specified writer.
27
38
/// - Parameters:
28
39
/// - message: Message to be logged.
29
40
/// - level: Inidicates how important this message is.
30
41
public func log( _ message: String , level: LogLevel = . info) {
31
- _log ( message, level: level)
42
+ switch executionType {
43
+ case . async ( let dispatchQueue) :
44
+ dispatchQueue. async {
45
+ _log ( message, level: level)
46
+ }
47
+ case . sync:
48
+ _lock. lock ( ) ; defer { _lock. unlock ( ) }
49
+ _log ( message, level: level)
50
+ }
32
51
}
33
52
34
53
private func _log( _ message: String , level: LogLevel ) {
35
- var message = message
54
+ var log = Log ( message: message , level : level )
36
55
modifiers. reversed ( ) . forEach {
37
- message = $0. modify ( message, level: level)
38
- }
39
- writer. write ( message: message)
40
- }
41
- }
42
-
43
- /// Indicates how important a message is.
44
- public enum LogLevel {
45
- case info, debug, warning, error
46
-
47
- var description : String {
48
- switch self {
49
- case . info:
50
- return " INFO "
51
- case . debug:
52
- return " DEBUG "
53
- case . warning:
54
- return " WARNING "
55
- case . error:
56
- return " ERROR "
56
+ $0. modify ( & log)
57
57
}
58
+ writer. write ( message: log. message)
58
59
}
59
60
}
0 commit comments