forked from vapor/postgres-nio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLogging+PSQL.swift
144 lines (119 loc) · 5.78 KB
/
Logging+PSQL.swift
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import Logging
extension PSQLConnection {
@usableFromInline
enum LoggerMetaDataKey: String {
case connectionID = "psql_connection_id"
case query = "psql_query"
case name = "psql_name"
case error = "psql_error"
case notice = "psql_notice"
case binds = "psql_binds"
case commandTag = "psql_command_tag"
case connectionState = "psql_connection_state"
case connectionAction = "psql_connection_action"
case message = "psql_message"
case messageID = "psql_message_id"
case messagePayload = "psql_message_payload"
case database = "psql_database"
case username = "psql_username"
case userEvent = "psql_user_event"
}
}
@usableFromInline
struct PSQLLoggingMetadata: ExpressibleByDictionaryLiteral {
@usableFromInline
typealias Key = PSQLConnection.LoggerMetaDataKey
@usableFromInline
typealias Value = Logger.MetadataValue
@usableFromInline var _baseRepresentation: Logger.Metadata
@usableFromInline
init(dictionaryLiteral elements: (PSQLConnection.LoggerMetaDataKey, Logger.MetadataValue)...) {
let values = elements.lazy.map { (key, value) -> (String, Self.Value) in
(key.rawValue, value)
}
self._baseRepresentation = Logger.Metadata(uniqueKeysWithValues: values)
}
@usableFromInline
subscript(postgresLoggingKey loggingKey: PSQLConnection.LoggerMetaDataKey) -> Logger.Metadata.Value? {
get {
return self._baseRepresentation[loggingKey.rawValue]
}
set {
self._baseRepresentation[loggingKey.rawValue] = newValue
}
}
@inlinable
var representation: Logger.Metadata {
self._baseRepresentation
}
}
extension Logger {
static let psqlNoOpLogger = Logger(label: "psql_do_not_log", factory: { _ in SwiftLogNoOpLogHandler() })
@usableFromInline
subscript(postgresMetadataKey metadataKey: PSQLConnection.LoggerMetaDataKey) -> Logger.Metadata.Value? {
get {
return self[metadataKey: metadataKey.rawValue]
}
set {
self[metadataKey: metadataKey.rawValue] = newValue
}
}
}
extension Logger {
/// See `Logger.trace(_:metadata:source:file:function:line:)`
@usableFromInline
func trace(_ message: @autoclosure () -> Logger.Message,
metadata: @autoclosure () -> PSQLLoggingMetadata,
source: @autoclosure () -> String? = nil,
file: String = #file, function: String = #function, line: UInt = #line) {
self.log(level: .trace, message(), metadata: metadata().representation, source: source(), file: file, function: function, line: line)
}
/// See `Logger.debug(_:metadata:source:file:function:line:)`
@usableFromInline
func debug(_ message: @autoclosure () -> Logger.Message,
metadata: @autoclosure () -> PSQLLoggingMetadata,
source: @autoclosure () -> String? = nil,
file: String = #file, function: String = #function, line: UInt = #line) {
self.log(level: .debug, message(), metadata: metadata().representation, source: source(), file: file, function: function, line: line)
}
/// See `Logger.info(_:metadata:source:file:function:line:)`
@usableFromInline
func info(_ message: @autoclosure () -> Logger.Message,
metadata: @autoclosure () -> PSQLLoggingMetadata,
source: @autoclosure () -> String? = nil,
file: String = #file, function: String = #function, line: UInt = #line) {
self.log(level: .info, message(), metadata: metadata().representation, source: source(), file: file, function: function, line: line)
}
/// See `Logger.notice(_:metadata:source:file:function:line:)`
@usableFromInline
func notice(_ message: @autoclosure () -> Logger.Message,
metadata: @autoclosure () -> PSQLLoggingMetadata,
source: @autoclosure () -> String? = nil,
file: String = #file, function: String = #function, line: UInt = #line) {
self.log(level: .notice, message(), metadata: metadata().representation, source: source(), file: file, function: function, line: line)
}
/// See `Logger.warning(_:metadata:source:file:function:line:)`
@usableFromInline
func warning(_ message: @autoclosure () -> Logger.Message,
metadata: @autoclosure () -> PSQLLoggingMetadata,
source: @autoclosure () -> String? = nil,
file: String = #file, function: String = #function, line: UInt = #line) {
self.log(level: .warning, message(), metadata: metadata().representation, source: source(), file: file, function: function, line: line)
}
/// See `Logger.error(_:metadata:source:file:function:line:)`
@usableFromInline
func error(_ message: @autoclosure () -> Logger.Message,
metadata: @autoclosure () -> PSQLLoggingMetadata,
source: @autoclosure () -> String? = nil,
file: String = #file, function: String = #function, line: UInt = #line) {
self.log(level: .error, message(), metadata: metadata().representation, source: source(), file: file, function: function, line: line)
}
/// See `Logger.critical(_:metadata:source:file:function:line:)`
@usableFromInline
func critical(_ message: @autoclosure () -> Logger.Message,
metadata: @autoclosure () -> PSQLLoggingMetadata,
source: @autoclosure () -> String? = nil,
file: String = #file, function: String = #function, line: UInt = #line) {
self.log(level: .critical, message(), metadata: metadata().representation, source: source(), file: file, function: function, line: line)
}
}