@@ -26,12 +26,12 @@ extension Log {
26
26
}
27
27
28
28
fileprivate func intValue( ) -> Int {
29
- let _intValue : [ Log . Level : Int ] = [
30
- . verbose : 0 ,
31
- . debug : 1 ,
32
- . info : 2 ,
33
- . warning : 3 ,
34
- . error : 4
29
+ let _intValue : [ Log . Level : Int ] = [
30
+ . verbose: 0 ,
31
+ . debug: 1 ,
32
+ . info: 2 ,
33
+ . warning: 3 ,
34
+ . error: 4
35
35
]
36
36
37
37
return _intValue [ self ] ?? 4
@@ -41,16 +41,16 @@ extension Log {
41
41
42
42
extension Log {
43
43
public enum FormatType {
44
- /// [Level] Any...
44
+ /// [Level] ▷ Any...
45
45
case short
46
46
47
- /// [Level] file:line ( funcName) Any...
47
+ /// [Level] file:line funcName ▷ Any...
48
48
case medium
49
49
50
- /// Time: [Level] file:line ( funcName) Any...
50
+ /// Time: [Level] file:line funcName ▷ Any...
51
51
case long
52
52
53
- /// Time: [Level] file:line ( funcName) [Thread Name] Any...
53
+ /// Time: [Level] file:line funcName [Thread Name] ▷ Any...
54
54
case full
55
55
}
56
56
}
@@ -87,59 +87,56 @@ public struct Log {
87
87
/// ```swift
88
88
/// Log.config(customLevelHeader: [.verbose : "VERBOSE"])
89
89
/// log.verbose("Hello, world!")
90
- /// // VERBOSE -> Hello, world!
90
+ /// // VERBOSE ▷ Hello, world!
91
91
/// ```
92
92
public private( set) static var customLevelHeader = [ Log . Level : String] ( )
93
93
94
-
95
94
/// Separator
96
95
///
96
+ /// default is " ▷ "
97
+ ///
97
98
/// ex)
98
99
/// ```swift
99
100
/// Log.config(separator: " : ")
100
101
/// log.verbose("Hello, world!")
101
102
/// // 📢 [VERBOSE] : Hello, world!
102
103
/// ```
103
- public private( set) static var separator = " -> "
104
+ public private( set) static var separator = " ▷ "
104
105
105
106
private init ( ) { }
106
-
107
- @available ( * , deprecated, message: " setLevel() is will remove next version, use Log.config(level:) " )
108
- public static func setLevel( _ config: Log . Level ) {
109
- logLevel = config
110
- }
111
-
107
+
112
108
/// Configration
109
+ ///
113
110
/// - Parameters:
114
111
/// - level: Log level. default: Log.Level.verbose
115
112
/// - customLevelHeader: Custom log level header.
116
113
/// - formatType: Log String FormatType. `default`: Log.FormatType.full
117
- /// - separator: Separator String. `default`: " -> "
114
+ /// - separator: Separator String. `default`: " ▷ "
118
115
/// - dateFormat: DateFormatter date fomat string. `default`: yyyy-MM-dd HH:mm:ss.SSS
119
116
///
120
117
/// ```swift
121
118
///
122
119
/// // dateFormat
123
120
/// Log.config(dateFormat: "yyyy-MM-dd")
124
121
/// Log.verbose("This is verbose")
125
- /// // 2019-11-25: 📢 [VERBOSE] Code.swift:26 ( method()) [com.apple.main-thread] -> This is verbose
122
+ /// // 2019-11-25: 📢 [VERBOSE] Code.swift:26 method() [com.apple.main-thread] ▷ This is verbose
126
123
///
127
124
/// // formatType
128
125
/// Log.config(formatType: .short)
129
126
/// Log.verbose("This is verbose")
130
- /// // 📢 [VERBOSE] -> This is verbose
127
+ /// // 📢 [VERBOSE] ▷ This is verbose
131
128
///
132
129
/// Log.config(formatType: .medium)
133
130
/// Log.verbose("This is verbose")
134
- /// // 📢 [VERBOSE] Code.swift:26 (method()) -> This is verbose
131
+ /// // 📢 [VERBOSE] Code.swift:26 (method()) ▷ This is verbose
135
132
///
136
133
/// Log.config(formatType: .long)
137
134
/// Log.verbose("This is verbose")
138
- /// // 2019-11-25: 📢 [VERBOSE] Code.swift:26 (method()) -> This is verbose
135
+ /// // 2019-11-25: 📢 [VERBOSE] Code.swift:26 (method()) ▷ This is verbose
139
136
///
140
137
/// Log.config(formatType: .full)
141
138
/// Log.verbose("This is verbose")
142
- /// // 2019-11-25: 📢 [VERBOSE] Code.swift:26 (method()) [com.apple.main-thread] -> This is verbose
139
+ /// // 2019-11-25: 📢 [VERBOSE] Code.swift:26 (method()) [com.apple.main-thread] ▷ This is verbose
143
140
///
144
141
/// // customLevelHeader
145
142
/// Log.config(customLevelHeader: [
@@ -150,7 +147,7 @@ public struct Log {
150
147
/// .error: "ERROR"
151
148
/// ])
152
149
/// log.verbose("Hello, world!")
153
- /// // VERBOSE -> Hello, world!
150
+ /// // VERBOSE ▷ Hello, world!
154
151
///
155
152
/// // separator
156
153
/// Log.config(separator: ": ")
@@ -188,93 +185,183 @@ public struct Log {
188
185
case . short:
189
186
return " \( level. string) "
190
187
case . medium:
191
- return " \( level. string) ( \( funcName) ) "
188
+ return " \( level. string) \( funcName) "
192
189
case . long:
193
- return " \( time) : \( level. string) \( file) : \( line) ( \( funcName) ) "
190
+ return " \( time) : \( level. string) \( file) : \( line) \( funcName) "
194
191
case . full:
195
192
let thread = threadName
196
- return " \( time) : \( level. string) \( file) : \( line) ( \( funcName) ) [ \( thread) ] "
193
+ return " \( time) : \( level. string) \( file) : \( line) \( funcName) [ \( thread) ] "
197
194
}
198
195
}
199
196
200
- private static func logger( _ level: Log . Level , fileName: String , line: UInt , funcName: String , output: Any ) {
197
+ private static func logger(
198
+ _ level: Log . Level ,
199
+ fileName: String ,
200
+ line: UInt ,
201
+ funcName: String ,
202
+ useDebugPrint: Bool ,
203
+ useDump: Bool ,
204
+ output: Any
205
+ ) {
201
206
#if DEBUG
202
207
guard logLevel. intValue ( ) <= level. intValue ( ) else { return }
203
- var logString = Log . logString (
208
+ let logString = Log . logString (
204
209
level,
205
210
fileName: fileName,
206
211
line: line,
207
212
funcName: funcName
208
213
)
209
-
214
+
210
215
internalQueue. sync {
211
216
guard let items = output as? [ Any ] else {
212
- Swift . print ( logString + separator + " \( output) " )
217
+ logPrinter ( logString, useDebugPrint , useDump , value : output)
213
218
return
214
219
}
215
220
216
221
switch items. count {
217
222
case 0 :
218
223
Swift . print ( logString)
219
224
case 1 :
220
- Swift . print ( logString + separator + " \( items [ 0 ] ) " )
225
+ logPrinter ( logString, useDebugPrint , useDump , value : items [ 0 ] )
221
226
default :
222
- logString += " \( separator) \n "
223
- logString += items. map { " \( $0) " }
224
- . joined ( separator: " \n " )
225
-
226
- Swift . print ( logString)
227
+ multipleItemLogPrinter ( logString, useDebugPrint, useDump, items: items)
227
228
}
228
229
}
229
230
#endif
230
231
}
231
232
232
- public static func verbose( fileName: String = #file, line: UInt = #line, funcName: String = #function, _ output: Any ... ) {
233
+ private static func logPrinter( _ logString: String , _ useDebugPrint: Bool , _ useDump: Bool , value: Any ) {
234
+ if useDump {
235
+ Swift . print ( " \( logString) \( separator) " )
236
+ Swift . dump ( value, name: name ( value) , indent: 2 )
237
+ } else {
238
+ Swift . print ( " \( logString) \( separator) " , terminator: " " )
239
+ if useDebugPrint {
240
+ Swift . debugPrint ( value)
241
+ } else {
242
+ Swift . print ( value)
243
+ }
244
+ }
245
+ }
246
+
247
+ private static func multipleItemLogPrinter(
248
+ _ logString: String ,
249
+ _ useDebugPrint: Bool ,
250
+ _ useDump: Bool ,
251
+ items: [ Any ]
252
+ ) {
253
+ if useDump {
254
+ Swift . print ( " \( logString) ▽ " )
255
+ for item in items {
256
+ Swift . dump ( item, name: name ( item) , indent: 2 )
257
+ }
258
+ } else {
259
+ Swift . print ( " \( logString) ▽ " )
260
+ for item in items {
261
+ if useDebugPrint {
262
+ Swift . debugPrint ( item)
263
+ } else {
264
+ Swift . print ( item)
265
+ }
266
+ }
267
+ }
268
+ }
269
+
270
+ private static func name( _ value: Any ) -> String {
271
+ return " \( type ( of: value) ) "
272
+ }
273
+
274
+ public static func verbose(
275
+ fileName: String = #file,
276
+ line: UInt = #line,
277
+ funcName: String = #function,
278
+ useDebugPrint: Bool = false ,
279
+ useDump: Bool = false ,
280
+ _ output: Any ...
281
+ ) {
233
282
logger (
234
283
. verbose,
235
284
fileName: fileName,
236
285
line: line,
237
286
funcName: funcName,
287
+ useDebugPrint: useDebugPrint,
288
+ useDump: useDump,
238
289
output: output
239
290
)
240
291
}
241
292
242
- public static func debug( fileName: String = #file, line: UInt = #line, funcName: String = #function, _ output: Any ... ) {
293
+ public static func debug(
294
+ fileName: String = #file,
295
+ line: UInt = #line,
296
+ funcName: String = #function,
297
+ useDebugPrint: Bool = false ,
298
+ useDump: Bool = false ,
299
+ _ output: Any ...
300
+ ) {
243
301
logger (
244
302
. debug,
245
303
fileName: fileName,
246
304
line: line,
247
305
funcName: funcName,
306
+ useDebugPrint: useDebugPrint,
307
+ useDump: useDump,
248
308
output: output
249
309
)
250
310
}
251
311
252
- public static func info( fileName: String = #file, line: UInt = #line, funcName: String = #function, _ output: Any ... ) {
312
+ public static func info(
313
+ fileName: String = #file,
314
+ line: UInt = #line,
315
+ funcName: String = #function,
316
+ useDebugPrint: Bool = false ,
317
+ useDump: Bool = false ,
318
+ _ output: Any ...
319
+ ) {
253
320
logger (
254
321
. info,
255
322
fileName: fileName,
256
323
line: line,
257
324
funcName: funcName,
325
+ useDebugPrint: useDebugPrint,
326
+ useDump: useDump,
258
327
output: output
259
328
)
260
329
}
261
330
262
- public static func warning( fileName: String = #file, line: UInt = #line, funcName: String = #function, _ output: Any ... ) {
331
+ public static func warning(
332
+ fileName: String = #file,
333
+ line: UInt = #line,
334
+ funcName: String = #function,
335
+ useDebugPrint: Bool = false ,
336
+ useDump: Bool = false ,
337
+ _ output: Any ...
338
+ ) {
263
339
logger (
264
340
. warning,
265
341
fileName: fileName,
266
342
line: line,
267
343
funcName: funcName,
344
+ useDebugPrint: useDebugPrint,
345
+ useDump: useDump,
268
346
output: output
269
347
)
270
348
}
271
349
272
- public static func error( fileName: String = #file, line: UInt = #line, funcName: String = #function, _ output: Any ... ) {
350
+ public static func error(
351
+ fileName: String = #file,
352
+ line: UInt = #line,
353
+ funcName: String = #function,
354
+ useDebugPrint: Bool = false ,
355
+ useDump: Bool = false ,
356
+ _ output: Any ...
357
+ ) {
273
358
logger (
274
359
. error,
275
360
fileName: fileName,
276
361
line: line,
277
362
funcName: funcName,
363
+ useDebugPrint: useDebugPrint,
364
+ useDump: useDump,
278
365
output: output
279
366
)
280
367
}
0 commit comments