mirror of https://github.com/VinGarcia/ksql.git
69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package ksql
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
)
|
|
|
|
type loggerKey struct{}
|
|
|
|
type LogValues struct {
|
|
Query string
|
|
Params []interface{}
|
|
Err error
|
|
}
|
|
|
|
func InjectLogger(
|
|
ctx context.Context,
|
|
level string,
|
|
logFn func(ctx context.Context, values LogValues),
|
|
) context.Context {
|
|
level = strings.ToLower(level)
|
|
if level != "info" {
|
|
// Default to the least verbose level:
|
|
level = "error"
|
|
}
|
|
|
|
return context.WithValue(ctx, loggerKey{}, logger{
|
|
level: level,
|
|
logFn: func(ctx context.Context, query string, params []interface{}, err error) {
|
|
logFn(ctx, LogValues{
|
|
Query: query,
|
|
Params: params,
|
|
Err: err,
|
|
})
|
|
},
|
|
})
|
|
}
|
|
|
|
func ctxLog(ctx context.Context, query string, params []interface{}, err *error) {
|
|
l := ctx.Value(loggerKey{})
|
|
if l == nil {
|
|
return
|
|
}
|
|
|
|
if *err != nil {
|
|
l.(logger)._error(ctx, query, params, *err)
|
|
return
|
|
}
|
|
|
|
l.(logger)._info(ctx, query, params, nil)
|
|
}
|
|
|
|
type logger struct {
|
|
level string
|
|
logFn func(ctx context.Context, query string, params []interface{}, err error)
|
|
}
|
|
|
|
func (l logger) _info(ctx context.Context, query string, params []interface{}, err error) {
|
|
if l.level == "error" {
|
|
return
|
|
}
|
|
|
|
l.logFn(ctx, query, params, err)
|
|
}
|
|
|
|
func (l logger) _error(ctx context.Context, query string, params []interface{}, err error) {
|
|
l.logFn(ctx, query, params, err)
|
|
}
|