-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogger
More file actions
115 lines (95 loc) · 3.53 KB
/
Logger
File metadata and controls
115 lines (95 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import UIKit
class Logger {
enum LogEvent: String {
case e = "‼️" // error
case d = "💬" // debug
case w = "⚠️" // warning
}
static func log(_ any: Any?,
filename: String = #file,
line: Int = #line,
column: Int = #column,
funcName: String = #function){
#if DEBUG
let fileNameClean = String(filename.split(separator: "/").last ?? Substring(""))
let logHead = LogEvent.d.rawValue + " " + Date().iso8601withFractionalSeconds + " \(fileNameClean) \(funcName):\(line)"
print(logHead, any ?? "nil", separator: "\n", terminator: "\n***************\n")
#endif
}
static func debugLog(_ any: Any?,
filename: String = #file,
line: Int = #line,
column: Int = #column,
funcName: String = #function){
#if DEBUG
let fileNameClean = String(filename.split(separator: "/").last ?? Substring(""))
let logHead = LogEvent.d.rawValue + " " + Date().iso8601withFractionalSeconds + " \(fileNameClean) \(funcName):\(line)"
debugPrint(logHead, any ?? "nil", separator: "\n", terminator: "\n***************\n")
#endif
}
static func err(_ any: Any?,
filename: String = #file,
line: Int = #line,
column: Int = #column,
funcName: String = #function){
#if DEBUG
let fileNameClean = String(filename.split(separator: "/").last ?? Substring(""))
let logHead = LogEvent.e.rawValue + " " + Date().iso8601withFractionalSeconds + " \(fileNameClean) \(funcName):\(line)"
print(logHead, any ?? "nil", separator: "\n", terminator: "\n***************\n")
#endif
}
static func warn(_ any: Any?,
filename: String = #file,
line: Int = #line,
column: Int = #column,
funcName: String = #function){
#if DEBUG
let fileNameClean = String(filename.split(separator: "/").last ?? Substring(""))
let logHead = LogEvent.w.rawValue + " " + Date().iso8601withFractionalSeconds + " \(fileNameClean) \(funcName):\(line)"
print(logHead, any ?? "nil", separator: "\n", terminator: "\n***************\n")
#endif
}
}
func print(_ items: Any..., separator: String = " ", terminator: String = "\n") {
#if DEBUG
var idx = items.startIndex
let endIdx = items.endIndex
repeat {
Swift.print(items[idx], separator: separator, terminator: idx == (endIdx - 1) ? terminator : separator)
idx += 1
}
while idx < endIdx
#endif
}
func debugPrint(_ items: Any..., separator: String = " ", terminator: String = "\n") {
#if DEBUG
var idx = items.startIndex
let endIdx = items.endIndex
repeat {
Swift.debugPrint(items[idx], separator: separator, terminator: idx == (endIdx - 1) ? terminator : separator)
idx += 1
}
while idx < endIdx
#endif
}
extension String {
var iso8601withFractionalSeconds: Date? { return Formatter.iso8601withFractionalSeconds.date(from: self) }
}
extension Date {
var iso8601withFractionalSeconds: String { return Formatter.iso8601withFractionalSeconds.string(from: self) }
}
extension Formatter {
static var iso8601withFractionalSeconds: ISO8601DateFormatter {
if #available(iOS 11.2, *) {
return ISO8601DateFormatter([.withInternetDateTime, .withFractionalSeconds])
}
return ISO8601DateFormatter([.withInternetDateTime])
}
}
extension ISO8601DateFormatter {
convenience init(_ formatOptions: Options, timeZone: TimeZone? = TimeZone(identifier: "Europe/Rome")) {
self.init()
self.formatOptions = formatOptions
self.timeZone = timeZone
}
}