1+ import Foundation
12import os
23
34public enum HTTPMockLog {
45 public static var logger = Logger ( subsystem: " httpmock " , category: " HTTPMock " )
56 public static var isEnabled = true
6- public static var level : Level = . info
7+ public static var level : Level = . trace
78
8- public static func error( _ message: String ) {
9+ public static func error( _ message: @autoclosure ( ) -> String ) {
910 if should ( . error) {
10- logger. error ( " [HTTPMock] \( message, privacy: . public) " )
11+ let message = message ( )
12+ logger. error ( " [HTTPMock][ \( level. description) ] \( message, privacy: . public) " )
13+ printToConsole ( " ⛔️ \( message) " , level: . error)
1114 }
1215 }
1316
14- public static func warning( _ message: String ) {
17+ public static func warning( _ message: @autoclosure ( ) -> String ) {
1518 if should ( . warning) {
16- logger. warning ( " [HTTPMock] \( message, privacy: . public) " )
19+ let message = message ( )
20+ logger. warning ( " [HTTPMock][ \( level. description) ] \( message, privacy: . public) " )
21+ printToConsole ( " ⚠️ \( message) " , level: . warning)
1722 }
1823 }
1924
20- public static func info( _ message: String ) {
25+ public static func info( _ message: @autoclosure ( ) -> String ) {
2126 if should ( . info) {
22- logger. info ( " [HTTPMock] \( message, privacy: . public) " )
27+ let message = message ( )
28+ logger. info ( " [HTTPMock][ \( level. description) ] \( message, privacy: . public) " )
29+ printToConsole ( message, level: . info)
2330 }
2431 }
2532
26- public static func debug( _ message: String ) {
33+ public static func debug( _ message: @autoclosure ( ) -> String ) {
2734 if should ( . debug) {
28- logger. debug ( " [HTTPMock] \( message, privacy: . public) " )
35+ let message = message ( )
36+ logger. debug ( " [HTTPMock][ \( level. description) ] \( message, privacy: . public) " )
37+ printToConsole ( message, level: . debug)
2938 }
3039 }
3140
32- public static func trace( _ message: String ) {
41+ public static func trace( _ message: @autoclosure ( ) -> String ) {
3342 if should ( . trace) {
34- logger. log ( " [HTTPMock] \( message, privacy: . public) " )
43+ let message = message ( )
44+ logger. log ( " [HTTPMock][ \( level. description) ] \( message, privacy: . public) " )
45+ printToConsole ( message, level: . trace)
3546 }
3647 }
3748
@@ -41,6 +52,21 @@ public enum HTTPMockLog {
4152 private static func should( _ l: Level ) -> Bool {
4253 isEnabled && l. rawValue <= level. rawValue
4354 }
55+
56+ @inline ( __always)
57+ private static var isXcodePreview : Bool {
58+ ProcessInfo . processInfo. environment [ " XCODE_RUNNING_FOR_PREVIEWS " ] == " 1 "
59+ }
60+
61+ private static func printToConsole( _ message: String , level: Level ) {
62+ #if DEBUG
63+ Swift . print ( " [HTTPMock][ \( level. description) ] \( message) " )
64+ #else
65+ if isXcodePreview {
66+ Swift . print ( " [HTTPMock][ \( level. description) ] \( message) " )
67+ }
68+ #endif
69+ }
4470}
4571
4672extension HTTPMockLog {
@@ -50,5 +76,15 @@ extension HTTPMockLog {
5076 case info
5177 case debug
5278 case trace
79+
80+ var description : String {
81+ switch self {
82+ case . error: " ERROR "
83+ case . warning: " WARNING "
84+ case . info: " INFO "
85+ case . debug: " DEBUG "
86+ case . trace: " TRACE "
87+ }
88+ }
5389 }
5490}
0 commit comments