Skip to content

Commit d6fc8b0

Browse files
authored
Merge pull request #2098 from stringintech/tracelog-time-key
add TraceLogConfig with customizable TimeKey and ensureConfig method for default initialization
2 parents c457de6 + 216049c commit d6fc8b0

File tree

1 file changed

+42
-17
lines changed

1 file changed

+42
-17
lines changed

tracelog/tracelog.go

+42-17
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,31 @@ func logQueryArgs(args []any) []any {
117117
return logArgs
118118
}
119119

120+
// TraceLogConfig holds the configuration for key names
121+
type TraceLogConfig struct {
122+
TimeKey string
123+
}
124+
125+
// DefaultTraceLogConfig returns the default configuration for TraceLog
126+
func DefaultTraceLogConfig() *TraceLogConfig {
127+
return &TraceLogConfig{
128+
TimeKey: "time",
129+
}
130+
}
131+
120132
// TraceLog implements pgx.QueryTracer, pgx.BatchTracer, pgx.ConnectTracer, and pgx.CopyFromTracer. All fields are
121133
// required.
122134
type TraceLog struct {
123135
Logger Logger
124136
LogLevel LogLevel
137+
Config *TraceLogConfig
138+
}
139+
140+
// ensureConfig initializes the Config field with default values if it is nil.
141+
func (tl *TraceLog) ensureConfig() {
142+
if tl.Config == nil {
143+
tl.Config = DefaultTraceLogConfig()
144+
}
125145
}
126146

127147
type ctxKey int
@@ -150,20 +170,21 @@ func (tl *TraceLog) TraceQueryStart(ctx context.Context, conn *pgx.Conn, data pg
150170
}
151171

152172
func (tl *TraceLog) TraceQueryEnd(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryEndData) {
173+
tl.ensureConfig()
153174
queryData := ctx.Value(tracelogQueryCtxKey).(*traceQueryData)
154175

155176
endTime := time.Now()
156177
interval := endTime.Sub(queryData.startTime)
157178

158179
if data.Err != nil {
159180
if tl.shouldLog(LogLevelError) {
160-
tl.log(ctx, conn, LogLevelError, "Query", map[string]any{"sql": queryData.sql, "args": logQueryArgs(queryData.args), "err": data.Err, "time": interval})
181+
tl.log(ctx, conn, LogLevelError, "Query", map[string]any{"sql": queryData.sql, "args": logQueryArgs(queryData.args), "err": data.Err, tl.Config.TimeKey: interval})
161182
}
162183
return
163184
}
164185

165186
if tl.shouldLog(LogLevelInfo) {
166-
tl.log(ctx, conn, LogLevelInfo, "Query", map[string]any{"sql": queryData.sql, "args": logQueryArgs(queryData.args), "time": interval, "commandTag": data.CommandTag.String()})
187+
tl.log(ctx, conn, LogLevelInfo, "Query", map[string]any{"sql": queryData.sql, "args": logQueryArgs(queryData.args), tl.Config.TimeKey: interval, "commandTag": data.CommandTag.String()})
167188
}
168189
}
169190

@@ -191,20 +212,21 @@ func (tl *TraceLog) TraceBatchQuery(ctx context.Context, conn *pgx.Conn, data pg
191212
}
192213

193214
func (tl *TraceLog) TraceBatchEnd(ctx context.Context, conn *pgx.Conn, data pgx.TraceBatchEndData) {
215+
tl.ensureConfig()
194216
queryData := ctx.Value(tracelogBatchCtxKey).(*traceBatchData)
195217

196218
endTime := time.Now()
197219
interval := endTime.Sub(queryData.startTime)
198220

199221
if data.Err != nil {
200222
if tl.shouldLog(LogLevelError) {
201-
tl.log(ctx, conn, LogLevelError, "BatchClose", map[string]any{"err": data.Err, "time": interval})
223+
tl.log(ctx, conn, LogLevelError, "BatchClose", map[string]any{"err": data.Err, tl.Config.TimeKey: interval})
202224
}
203225
return
204226
}
205227

206228
if tl.shouldLog(LogLevelInfo) {
207-
tl.log(ctx, conn, LogLevelInfo, "BatchClose", map[string]any{"time": interval})
229+
tl.log(ctx, conn, LogLevelInfo, "BatchClose", map[string]any{tl.Config.TimeKey: interval})
208230
}
209231
}
210232

@@ -223,20 +245,21 @@ func (tl *TraceLog) TraceCopyFromStart(ctx context.Context, conn *pgx.Conn, data
223245
}
224246

225247
func (tl *TraceLog) TraceCopyFromEnd(ctx context.Context, conn *pgx.Conn, data pgx.TraceCopyFromEndData) {
248+
tl.ensureConfig()
226249
copyFromData := ctx.Value(tracelogCopyFromCtxKey).(*traceCopyFromData)
227250

228251
endTime := time.Now()
229252
interval := endTime.Sub(copyFromData.startTime)
230253

231254
if data.Err != nil {
232255
if tl.shouldLog(LogLevelError) {
233-
tl.log(ctx, conn, LogLevelError, "CopyFrom", map[string]any{"tableName": copyFromData.TableName, "columnNames": copyFromData.ColumnNames, "err": data.Err, "time": interval})
256+
tl.log(ctx, conn, LogLevelError, "CopyFrom", map[string]any{"tableName": copyFromData.TableName, "columnNames": copyFromData.ColumnNames, "err": data.Err, tl.Config.TimeKey: interval})
234257
}
235258
return
236259
}
237260

238261
if tl.shouldLog(LogLevelInfo) {
239-
tl.log(ctx, conn, LogLevelInfo, "CopyFrom", map[string]any{"tableName": copyFromData.TableName, "columnNames": copyFromData.ColumnNames, "err": data.Err, "time": interval, "rowCount": data.CommandTag.RowsAffected()})
262+
tl.log(ctx, conn, LogLevelInfo, "CopyFrom", map[string]any{"tableName": copyFromData.TableName, "columnNames": copyFromData.ColumnNames, "err": data.Err, tl.Config.TimeKey: interval, "rowCount": data.CommandTag.RowsAffected()})
240263
}
241264
}
242265

@@ -253,6 +276,7 @@ func (tl *TraceLog) TraceConnectStart(ctx context.Context, data pgx.TraceConnect
253276
}
254277

255278
func (tl *TraceLog) TraceConnectEnd(ctx context.Context, data pgx.TraceConnectEndData) {
279+
tl.ensureConfig()
256280
connectData := ctx.Value(tracelogConnectCtxKey).(*traceConnectData)
257281

258282
endTime := time.Now()
@@ -261,11 +285,11 @@ func (tl *TraceLog) TraceConnectEnd(ctx context.Context, data pgx.TraceConnectEn
261285
if data.Err != nil {
262286
if tl.shouldLog(LogLevelError) {
263287
tl.Logger.Log(ctx, LogLevelError, "Connect", map[string]any{
264-
"host": connectData.connConfig.Host,
265-
"port": connectData.connConfig.Port,
266-
"database": connectData.connConfig.Database,
267-
"time": interval,
268-
"err": data.Err,
288+
"host": connectData.connConfig.Host,
289+
"port": connectData.connConfig.Port,
290+
"database": connectData.connConfig.Database,
291+
tl.Config.TimeKey: interval,
292+
"err": data.Err,
269293
})
270294
}
271295
return
@@ -274,10 +298,10 @@ func (tl *TraceLog) TraceConnectEnd(ctx context.Context, data pgx.TraceConnectEn
274298
if data.Conn != nil {
275299
if tl.shouldLog(LogLevelInfo) {
276300
tl.log(ctx, data.Conn, LogLevelInfo, "Connect", map[string]any{
277-
"host": connectData.connConfig.Host,
278-
"port": connectData.connConfig.Port,
279-
"database": connectData.connConfig.Database,
280-
"time": interval,
301+
"host": connectData.connConfig.Host,
302+
"port": connectData.connConfig.Port,
303+
"database": connectData.connConfig.Database,
304+
tl.Config.TimeKey: interval,
281305
})
282306
}
283307
}
@@ -298,20 +322,21 @@ func (tl *TraceLog) TracePrepareStart(ctx context.Context, _ *pgx.Conn, data pgx
298322
}
299323

300324
func (tl *TraceLog) TracePrepareEnd(ctx context.Context, conn *pgx.Conn, data pgx.TracePrepareEndData) {
325+
tl.ensureConfig()
301326
prepareData := ctx.Value(tracelogPrepareCtxKey).(*tracePrepareData)
302327

303328
endTime := time.Now()
304329
interval := endTime.Sub(prepareData.startTime)
305330

306331
if data.Err != nil {
307332
if tl.shouldLog(LogLevelError) {
308-
tl.log(ctx, conn, LogLevelError, "Prepare", map[string]any{"name": prepareData.name, "sql": prepareData.sql, "err": data.Err, "time": interval})
333+
tl.log(ctx, conn, LogLevelError, "Prepare", map[string]any{"name": prepareData.name, "sql": prepareData.sql, "err": data.Err, tl.Config.TimeKey: interval})
309334
}
310335
return
311336
}
312337

313338
if tl.shouldLog(LogLevelInfo) {
314-
tl.log(ctx, conn, LogLevelInfo, "Prepare", map[string]any{"name": prepareData.name, "sql": prepareData.sql, "time": interval, "alreadyPrepared": data.AlreadyPrepared})
339+
tl.log(ctx, conn, LogLevelInfo, "Prepare", map[string]any{"name": prepareData.name, "sql": prepareData.sql, tl.Config.TimeKey: interval, "alreadyPrepared": data.AlreadyPrepared})
315340
}
316341
}
317342

0 commit comments

Comments
 (0)